gpt4 book ai didi

objective-c - 使用 Storyboard时重用 UIViewController 实例

转载 作者:技术小花猫 更新时间:2023-10-29 11:20:21 26 4
gpt4 key购买 nike

我决定在我当前的 iPhone 应用程序中尝试使用 Storyboard。我遇到了一些问题。我真的需要重用我的 UIViewController 实例。

这是什么意思?好吧,例如我有一个 TableView Controller 。当我点击一个单元格时,另一个 View Controller 会从 Storyboard 中加载并推送到导航 Controller 堆栈上。这一切都很好,但是每次加载这个 View Controller 需要大约半秒到一秒的时间。在我使用 Storyboard之前,我只是通过缓存创建的实例来解决这个问题,这样当你第二次点击一个单元格时, View Controller 可以立即显示。

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

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

有谁知道如何使用 Storyboard 来完成此操作?提前致谢。

最佳答案

如果您正在使用 segues,您将需要创建自定义 segues 以便像以前一样使用缓存的 View Controller 。否则,典型的“推送”segue 将为 segue.destinationViewController 创建一个新的 View Controller 实例。如果您编写自定义 UIStoryboardSegue 类并使用 custom segue,您可以覆盖 initWithIdentifier:source:destination: 和将缓存的 View Controller 放入 destinationViewController,然后覆盖 perform 以使用经典的 pushViewController 调用。

如果您真的打算使用它们,这就是您处理转场的方式。不过我会跳过它,除非你真的想让花哨的箭头把所有东西都放在你的 Storyboard上。如果你跳过它,你可以将 View Controller 实例化到缓存中,然后像以前一样将它们推送。

如果您的问题更多是关于在 Storyboard中定位 View Controller ,那么您可以使用:

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

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

希望对您有所帮助。

关于objective-c - 使用 Storyboard时重用 UIViewController 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com