UIPopoverController不会触发委托方法

时间:2015-11-19 17:07:29

标签: ios objective-c delegates uipopovercontroller presentviewcontroller

我正在尝试检测何时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>

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

2 个答案:

答案 0 :(得分:0)

你可能已经解决了,但我遇到了同样的问题。我在我的Viewcontroller中持有UIPopoverController的一个实例,并采用了这种方式:

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

当然这不起作用,因为我正在初始化UIPopoverController AFTER设置委托,它会覆盖委托设置。所以正确的方法是FIRST初始化UIPopovercontroller,然后设置委托

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

也许你正在重新初始化你的UIPopoverController - 只需在重新初始化后重新设置委托。

Hpoe这有帮助。

答案 1 :(得分:0)

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

  1. 我为班级制作了一个“全局”变量。

    self.popoverVC = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
    self.popoverVC.delegate = self;
    
  2. 因为它是UIPopoverController中的UIImagePickerController,所以我需要听取UIImagePickerController的分离并结合两种方法:

    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
    - (void) popoverControllerDidDismissPopover:(UIPopoverController *) popoverController
    
  3. 所以我现在可以检测UIPopoverController何时被解雇。