【问题标题】:How can I observe when UIPopoverController is dismissed?如何观察 UIPopoverController 何时被解雇?
【发布时间】: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");
}

【问题讨论】:

    标签: ios uisplitviewcontroller uipopovercontroller


    【解决方案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: 委托方法。

      【讨论】:

      • 我的荣幸 :) 如果您愿意,您可以发布自己的代码解决方案(现在在您的问题中)作为您自己问题的答案,然后接受它 - 浏览页面的人可能更有可能在“答案”部分看到它,尤其是带有绿色的“已接受”复选标记。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      相关资源
      最近更新 更多