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 委托委托方法未被调用
用 -dismissPopoverAnimated 解散 UIPopoverController:不会调用委托?
UIPopoverController 委托未在解雇时被调用