UIPopoverController 不触发委托方法

Posted

技术标签:

【中文标题】UIPopoverController 不触发委托方法【英文标题】:UIPopoverController not triggering delegate methods 【发布时间】:2015-11-19 17:07:28 【问题描述】:

我正在尝试检测 UIPopoverController 何时被解除,但它似乎无法正常工作,这些方法没有被调用。这是我展示 UIPopoverController 的代码:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePickerController.delegate = self;
UIPopoverController  *popoverVC = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
popoverVC.delegate = self;
[popoverVC presentPopoverFromRect:CGRectMake(self.frame.origin.x,self.frame.origin.y, self.frame.size.width, self.frame.size.height) inView:[home view] permittedArrowDirections:0 animated:YES];

我正在尝试触发此方法,但没有被调用:

- (void) popoverControllerDidDismissPopover:(UIPopoverController *) popoverController;

我确实将委托添加到标题中:

@interface Map : UIView <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate, UIScrollViewDelegate,UIPopoverControllerDelegate>

我不知道我错过了什么,根本不工作。

【问题讨论】:

【参考方案1】:

您可能已经解决了它,但我刚刚遇到了同样的问题。我在我的 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 - 重新初始化后再次设置委托。

希望这会有所帮助。

【讨论】:

谢谢,我想出了如何让它发挥作用,我将其发布为答案,这是与其他东西的结合。【参考方案2】:

所以,我想出了如何让它发挥作用。

    我为类创建了一个“全局”变量。

    self.popoverVC = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
    self.popoverVC.delegate = self;
    

    因为它是 UIPopoverController 中的 UIImagePickerController,所以我也需要监听 UIImagePickerController 的关闭并结合两种方法:

    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
    - (void) popoverControllerDidDismissPopover:(UIPopoverController *) popoverController
    

所以我现在可以检测到 UIPopoverController 何时被解除。

【讨论】:

以上是关于UIPopoverController 不触发委托方法的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController 委托委托方法未被调用

无法实现 UIPopoverController 委托

用 -dismissPopoverAnimated 解散 UIPopoverController:不会调用委托?

UIPopoverController 委托未在解雇时被调用

如何观察 UIPopoverController 何时被解雇?

从 UIActionSheet 访问 UIPopoverController