【问题标题】:iPad: how to close UIPopoverController from within the "popped" ViewControlleriPad:如何从“弹出”的 ViewController 中关闭 UIPopoverController
【发布时间】:2011-07-21 23:55:00
【问题描述】:

我正在将 iphone 项目转换为 ipad。在 iphone 上,我有一个 mainViewController,它使用 addSubView 打开一个 loginViewController。

在 iPad 上,我想在弹出窗口中显示该 loginViewController。所以我做了类似的事情:

UIPopoverController *loginPop = [[UIPopoverController alloc] initWithContentViewController:loginViewController];
[loginPop presentPopoverFromRect:CGRectMake(150, 150, 90, 90) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:true];

这很好用。问题是 loginViewController 何时完成其“业务”。在 iPhone 上我只调用一个简单的[self.view removeFromSuperview]; 但在 ipad 上这会导致视图从 PopoverController 中移除,但弹出窗口的框架仍然存在。

所以我的问题是:在 loginViewController 中是否有任何简单的方法可以删除其 PopoverController 容器(不使用委托或通知)?

【问题讨论】:

    标签: ipad uipopovercontroller popover dismiss


    【解决方案1】:

    是的,您的loginViewController 应该保留对弹出框的引用。然后您可以使用弹出框本身的dismissPopoverAnimated: 方法将其删除。

    【讨论】:

    • 能否给出循环引用?由于 PopoverController 是使用 loginController 初始化的(并且显然有对此的引用)?看起来像这里的反模式......有人吗?
    • 你可能会弱化这个引用。
    【解决方案2】:

    实际上,我想实现它,但我记得我们可以访问应用程序委托,这反过来又可以访问它的主视图,在那里,您可以存储弹出框的属性,您可以调用 @ 987654321@.

    像这样:

    MyAppDelegate *app = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
    MyViewController * myView =[app viewController];
    [myView.popover dismissPopoverAnimated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 2011-02-09
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多