如何观察 UIPopoverController 何时被解雇?

Posted

技术标签:

【中文标题】如何观察 UIPopoverController 何时被解雇?【英文标题】:How can I observe when UIPopoverController is dismissed? 【发布时间】:2012-08-21 17:13:52 【问题描述】:

UISplitViewController 有委托方法:

-(void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController

我希望从类似但不存在的委托方法中获取功能:

-(void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willDismissViewController:(UIViewController *)aViewController

考虑到UISplitViewController/UIPopoverController/UIKit 通常不符合 KVO 标准,因此我无法向UIPopoverControllerisPopoverVisible 属性添加观察者。

谢谢

答案:

//Sent when switching to portrait
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc
  
    ...

    self.popoverController = pc;
    [self.popoverController setDelegate:self];


-(void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController

    NSLog(@"SHOWING POPOVER");


- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController

    NSLog(@"HIDING POPOVER");

【问题讨论】:

【参考方案1】:

想通了,在UISplitViewControllerDelegate 之外添加UIPopoverController 委托:

//Sent when switching to portrait
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc
  
    ...

    self.popoverController = pc;
    [self.popoverController setDelegate:self];


-(void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController

    NSLog(@"SHOWING POPOVER");


- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController

    NSLog(@"HIDING POPOVER");

【讨论】:

【参考方案2】:

当您收到第一个委托通知时,您会收到一个对 UIPopoverController 的引用,该控制器将显示隐藏的视图控制器。注册为其委托,然后使用 UIPopoverControllerDelegate 协议中的 -popoverControllerDidDismissPopover: 委托方法。

【讨论】:

我的荣幸 :) 如果您愿意,您可以发布自己的代码解决方案(现在在您的问题中)作为您自己问题的答案,然后接受它 - 浏览页面的人可能更有可能在“答案”部分看到它,尤其是带有绿色的“已接受”复选标记。

以上是关于如何观察 UIPopoverController 何时被解雇?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIPopoverController 上创建按钮 [关闭]

UIPopoverController,如何改变它的大小呢?

如何删除 UIPopoverController 中的“模糊”阴影

如何使 UIPopoverController 自动改变其箭头方向

如何自定义/样式化 UIPopoverController

UIPopoverController 的 UIView:如何去除阴影?