如何预加载或缓存目标viewcontroller而不用segue实例化

时间:2013-12-26 15:21:15

标签: ios iphone objective-c ipad

当触发segue时,它将启动目标viewcontroller。有没有办法我可以预先加载或缓存视图控制器并在触发segue时将其加载到代码中?提前谢谢。

3 个答案:

答案 0 :(得分:3)

使用segue的一个好处是视图控制器是为您设置和实例化的。您可以简单地不使用segue,并自己将VC启动/推送到导航堆栈。这将允许您随时初始化它,将VC存储为ivar,然后在适当时将其推送。

答案 1 :(得分:2)

是。例如为了提高响应速度,我需要预先加载设备旋转时显示的照片。因此,在故事板中,我选择了横向VC并在Identity Inspector中设置了Storyboard ID。然后当加载肖像VC时,我通过调用:

创建了风景VC
self.landscapeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"landscapePhotosVC"];
// this next line is critical so photos can be added to the UIScrollView. 
// Else the UIScrollView on landscape VC will be nil
[self.landscapeViewController view];
self.landscapeViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.landscapeViewController.modalPresentationStyle = UIModalPresentationFullScreen;

然后当viewDidAppear触发纵向VC时,我将照片添加到横向VC上的UIScrollView。

当设备旋转到横向时,我会显示风景VC:

[self.navigationController presentViewController:self.landscapeViewController 
                                        animated:YES 
                                      completion:nil];

答案 2 :(得分:1)

你可以在不使用segue的情况下实例化视图控制器,首先在storyboard编辑器中为UIViewController设置storyboardID,然后使用

访问它
MyViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyVC"];