我决定在我当前的iPhone应用程序中使用故事板。我面临一些问题。我真的需要重用我的UIViewController实例。
我的意思是什么?好吧,例如我有一个表视图控制器。当我点击一个单元格时,另一个视图控制器从故事板加载并推送到导航控制器堆栈。这一切都运行良好,但每次加载此视图控制器大约需要半秒到一秒。在我使用故事板之前,我只是通过缓存创建的实例解决了这个问题,因此第二次点击一个单元格时,可以立即显示视图控制器。
通过缓存创建的实例我的意思是这样的:
if (!cachedInstance) {
cachedInstance = [MyViewController new];
}
[self.navigationController pushViewController:cachedInstance];
有谁知道如何使用故事板来实现这一目标?提前谢谢。
答案 0 :(得分:10)
如果您正在使用segues,则需要创建自定义segue以便像以前一样使用缓存的视图控制器。否则,典型的“推送”segue将为segue.destinationViewController
创建视图控制器的新实例。如果您编写自定义UIStoryboardSegue
类并使用custom
segue
,则可以覆盖initWithIdentifier:source:destination:
并将缓存的视图控制器放入destinationViewController
,然后覆盖perform
使用经典pushViewController
电话。
如果你真的打算使用它,那就是你如何处理segue。我会跳过它,除非你真的想要花哨的箭头在你的故事板上放置一切。如果你跳过它,你可以将视图控制器实例化到缓存中,然后像以前一样将它们推开。
如果您的问题更多是关于在故事板中查找视图控制器,那么您可以使用:
UIViewController *vc = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"Some View Controller"];
然后,您可以将其保存到缓存中并像在示例代码中一样进行推送。
希望有所帮助。