我这里有点困境。我有一个将UINavigationViewController作为rootViewController的应用程序。据我所知,UINavigationViewController在实例化时需要一个rootViewController。问题是,我有几个UIViewControllers可供选择,选择取决于从Web服务返回的数据。
这是否意味着我应该在AppDelegate中调用Web服务并在获取数据后仅实例化UINavigationViewController?
我还考虑过创建一个包含UINavigationViewController并将其视图作为子视图的包装器UIViewController。但看起来像嵌套视图控制器有一些缺点,主要是生命周期和旋转。
有更好的方法吗?谢谢!
更新:我的同事推荐了另一种可能最干净的解决方案。在这里,AppDelegate加载一个“bootstraper”ViewController,其主要目的是从webservice中提取数据,并可能显示一个加载指示器。一旦获得数据,它将自行删除并添加具有相应根的导航控制器。
答案 0 :(得分:2)
可能会推送一个带有“等待数据...”视图的viewcontroller,然后当web响应到达时弹出它并推送相应的viewcontroller?
答案 1 :(得分:0)
Web服务调用可能需要一段时间。在Web花费时间回应时冻结UI是一个非常糟糕的主意。使用旋转轮和“请稍候...”通知加载视图控制器(和视图),启动服务调用,然后在服务响应后,将其替换为真实的。
答案 2 :(得分:0)
UINavigationController有一个名为viewControllers的属性,可以设置。请参阅http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/occ/instp/UINavigationController/viewControllers。
// after your web service returns
navigationController.viewControllers = [NSArray arrayWithObject:yourNewController];
如果在Web服务返回之前您不打算在导航控制器中显示任何内容,那么您可以等到它返回后再创建导航控制器。如果您要在导航控制器中显示其他视图控制器