在UIPageViewContoller iOS中强制初始化ViewController

时间:2013-12-04 12:49:38

标签: ios objective-c uiviewcontroller uipageviewcontroller

我使用基于页面的应用程序非常类似于apple(基于页面的应用程序)的标准模板。我希望所有页面都可以在启动时加载并保存在内存中,但它不起作用。我将ViewControllers显示在UIPageViewController中的所有NSArray保留在我发起的ViewControllers中。问题是PageViewControllerViewControllers调用它们之前不会启动ModelController。如何在- (id)init { self = [super init]; if (self) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *historyViewController = [storyboard instantiateViewControllerWithIdentifier:@"HistoryViewController"]; historyViewController.restorationIdentifier= HistoryRestorationID; UIViewController *totalViewController = [storyboard instantiateViewControllerWithIdentifier:@"TotalViewSlidingController"]; totalViewController.restorationIdentifier= TotalRestorationID; PlugTableViewController *plugViewController = [storyboard instantiateViewControllerWithIdentifier:@"PlugSlidingViewController"]; plugViewController.restorationIdentifier= PlugRestorationID; //Force initiation of ViewController here! pages = [[NSArray alloc] initWithObjects:historyViewController,totalViewController,plugViewController, nil]; } return self; 的init方法中强制启动{{1}}。

{{1}}

}

我想直接启动它们的原因是因为它们需要时间来启动它们。

2 个答案:

答案 0 :(得分:0)

在有人引用其view属性之前,不会加载视图层次结构。 尝试拨打[historyViewController view]或阅读historyViewController.view。它应该完成这项工作。

答案 1 :(得分:0)

尝试对要使用此视图的对象进行类型转换,希望这可以完成这项工作。

PlugTableViewController *plugView=(PlugTableViewController *)[pages objectAtIndex:3];

还有一件事,试着改变代码

UIViewController *historyViewController = [storyboard instantiateViewControllerWithIdentifier:@"HistoryViewController"];

HistoryViewController *historyViewController = [storyboard instantiateViewControllerWithIdentifier:@"HistoryViewController"];

希望您已经制作了一个标题类HistoryViewController,但是您要按UIViewController

启动查看

另一种可能的解决方案是预加载数据而不是viewcontroller,因为视图控制器不需要花时间加载。

最常见的方法是将所有视图添加为子视图并将其隐藏,并在需要时显示它们。