使 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 保持持久(仅分配一个实例)的主要内容,如果未能解决你的问题,请参考以下文章
从另一个 Popover 中关闭显示为 Popover segue 的 ViewController
在 iOS 9 上关闭由 segue 创建的 Popover
iOS 6 Storyboard Segue 风格 Popover 与 UIPopoverController 目标崩溃