2012-09-04 95 views
0

在我的應用程序中,我有一個presentViewController,裏面有一個打開彈出窗口的按鈕。在這個popover中,我有一個barButtonItem來保存這個popover的數據。我希望當用戶在popover之外輕敲時,數據也可以被保存。 我試圖在presentViewController視圖中使用popoverControllerDidDismissPopover方法。我有委託,但是當我在popover外部輕敲時,不會調用此方法。popoverControllerDidDismissPopover方法不叫

我該怎麼辦?

謝謝!

回答

5

加入這行代碼,同時增加酥料餅:

popover.delegate = self; 

在.h文件中還註冊popOverDelegate其中u出示酥料餅控制器

@interface yourViewController : UIViewController<UIPopoverControllerDelegate> 
+0

我在我的兩行代碼:( – javiazo

+0

我在小時委託我做popover.delegate =自我;當我致電酥料餅 – javiazo

3

你可能已經解決了這個問題,但我只是面對一樣的問題。我在我的viewController持有UIPopoverController一個實例,並曾這樣說:

self.popover.delegate = self; 
self.popover = [[UIPopoverController alloc] initWithContentViewController:wgtvc]; 

當然,因爲我初始化UIPopoverController後設置的委託,將覆蓋委託設置這不起作用。所以,正確的做法是,先初始化UIPopovercontroller,然後設置委託

self.popover = [[UIPopoverController alloc] initWithContentViewController:wgtvc]; 
self.popover.delegate = self; 

也許你正在重新初始化您的UIPopoverController地方 - 重新初始化後重新剛纔設置的委託。

+0

謝謝這個工作對我來說 – IbrarMumtaz

+0

不客氣! ! – gasparuff

1

我知道這個問題是舊的,但希望它可以幫助別人那裏......

的問題是在你的酥料餅控制器的初始化。如果您已在故事板中建立了彈出窗口,則需要對此彈窗框進行引用,以便委託在被解散時被調用。

在您的賽格瑞方法準備:

相反的:

self.popoverController = [[UIPopoverController alloc]initWithContentViewController:segue.destinationViewController]; 
    self.popoverController.delegate = self; 

您需要:

​​

然後確保如果當酥料餅應該出現在

正確處理
  • (BOOL)shou ldPerformSegueWithIdentifier :(NSString *)標識符發件人:(id)發件人
2

我有同樣的問題,我解決了它通過處理iOS8不同。

演示代碼

UIViewController *searchViewController = [[UIViewController alloc] init]; 

    [[searchViewController view] addSubview:_searchOptions]; 
    [searchViewController setModalPresentationStyle:UIModalPresentationPopover]; 
    [searchViewController setPreferredContentSize:CGSizeMake(500, 400)]; 

    [_searchOptions setHidden:NO]; 
    [_searchOptions setFrame:[[searchViewController view] bounds]]; 
    [_searchOptions setAutoresizingMask:UIViewAutoresizingFlexibleWidthAndHeight]; 

    if (CRIdiomToolsIsIOS8OrHigher()) 
    { 
     UIPopoverPresentationController *popOverPresentationController = [searchViewController popoverPresentationController]; 

     [popOverPresentationController setDelegate:self]; 
     [popOverPresentationController setSourceView:[_searchOptionsButton disclosureView]]; 
     [popOverPresentationController setSourceRect:[[_searchOptionsButton disclosureView] bounds]]; 

     [self presentViewController:searchViewController animated:YES completion:nil]; 
    } 
    else 
    { 
     UIPopoverController *popOverControler = [[UIPopoverController alloc] initWithContentViewController:searchViewController]; 

     [popOverControler setDelegate:self]; 
     [popOverControler setPopoverContentSize:CGSizeMake(500, 400)]; 

     [popOverControler presentPopoverFromRect:[[_searchOptionsButton disclosureView] bounds] inView:[_searchOptionsButton disclosureView] permittedArrowDirections:UIPopoverArrowDirectionUp|UIPopoverArrowDirectionLeft animated:YES]; 
    } 

委託調用

#pragma mark Delegate Methods: UIPopoverControllerDelegate 

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    [self showSearchOptions:NO animated:YES]; 
} 

#pragma mark Delegate Methods: UIPopoverPresentationControllerDelegate 

- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController 
{ 
    [self showSearchOptions:NO animated:YES]; 
} 
1

我有同樣的問題。您將需要保留popover對象,這樣委託方法被調用。它奇怪,但它的作品。

@property (nonatomic, retain) UIPopoverController *popupObject; 

UIPopoverController *popup = [[UIPopoverController alloc] initWithContentViewController:viewController]; 
popup.delegate = self; 
[popup presentPopoverFromRect:presentationRect inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
self.popupObject = popup; //Retained 


-(void) popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    //Do whatever operation you need to perform 
    self.popupObject = nil; 
}