使用故事板时重用 UIViewController 实例

2024-02-12

我决定在我当前的 iPhone 应用程序中尝试使用故事板。我面临着一些问题。我真的需要重用我的 UIViewController 实例。

我这么说是什么意思?好吧,例如我有一个表视图控制器。当我点击一个单元格时,另一个视图控制器将从故事板加载并推送到导航控制器堆栈上。这一切都运行良好,但每次加载此视图控制器大约需要半秒到一秒。在使用故事板之前,我只是通过缓存创建的实例来解决这个问题,以便第二次点击单元格时可以立即显示视图控制器。

通过缓存创建的实例,我的意思是这样的:

if (!cachedInstance) {
    cachedInstance = [MyViewController new];
}
[self.navigationController pushViewController:cachedInstance];

有谁知道如何使用故事板来实现这一点?提前致谢。


如果您使用 Segues,则需要创建自定义 Segues 才能像以前一样使用缓存的视图控制器。否则,典型的“推”segue 将为视图控制器创建一个新实例segue.destinationViewController。如果你写一个自定义UIStoryboardSegue类别和用途custom segue你可以覆盖initWithIdentifier:source:destination:并将缓存的视图控制器放入destinationViewController,然后覆盖perform使用经典pushViewController call.

如果你真的想使用它们,这就是你处理 segue 的方式。不过,我会跳过它,除非您真的希望用花哨的箭头将所有内容都放在故事板上。如果您跳过它,您可以将视图控制器实例化到缓存中,然后像以前一样将它们推送。

如果您的问题更多是关于在故事板中定位视图控制器,那么您可以使用:

UIViewController *vc = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"Some View Controller"];

然后,您可以将其保存到缓存中并像在示例代码中那样推送它。

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用故事板时重用 UIViewController 实例 的相关文章

随机推荐