使 popover segue 的 View Controller 保持持久(仅分配一个实例)

Posted

技术标签:

【中文标题】使 popover segue 的 View Controller 保持持久(仅分配一个实例)【英文标题】:Making a popover segue´s View Controller stay persistent (only allocate one instance) 【发布时间】:2013-09-14 21:18:02 【问题描述】:

我最初使用标签栏控制器为 iPhone 编写了我的应用程序,视图控制器被初始化一次并保持持久 - 当我点击标签栏时它不会初始化视图控制器的新实例。

在 iPad 上,我使用的是不同的 GUI,但我有一个始终停留在屏幕上的主视图,其余的都是与主视图分离的弹出框。

我希望弹出框保持持久(仅初始化一次)什么是最好的存档方式。如果我一直在使用 *.xib 文件,我可以在主视图中初始化 popover 的视图控制器,然后在 segueing 时发送它们的副本,这样只有一个实例。但我正在使用情节提要。

【问题讨论】:

【参考方案1】:

如果您希望控制器保持持久性,则不能使用 segue,因为 segue 总是实例化新控制器。您仍然可以使用故事板,但您必须让控制器保持未连接状态,并在代码中实例化它们,并将它们分配给强属性。所以,像:

-(void)presentPopover 
    if (! self.vc) 
        self.vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyController"];
    
    // do what you want here to put vc on screen

【讨论】:

我找到了一个快速解决方案,使用您的代码从情节提要初始化视图控制器。【参考方案2】:

我找到了一个解决方案,实际上它很简单,只需使用 UIPopoverController 并使用您要呈现的视图控制器对其进行初始化。这样它就不会在每次请求弹出框时都实例化一个新实例。

if (!popoverController)
    popoverController = [[UIPopoverController alloc]initWithContentViewController:bellViewController];


[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
popoverController.delegate=self;

【讨论】:

以上是关于使 popover segue 的 View Controller 保持持久(仅分配一个实例)的主要内容,如果未能解决你的问题,请参考以下文章

Segue Popover 无法正常运行

从 popover segue 推送 segue 不起作用

从另一个 Popover 中关闭显示为 Popover segue 的 ViewController

我看不到popover segue

在 iOS 9 上关闭由 segue 创建的 Popover

iOS 6 Storyboard Segue 风格 Popover 与 UIPopoverController 目标崩溃