如何让导航控制器在屏幕外加载时加载其根视图控制器?
Posted
技术标签:
【中文标题】如何让导航控制器在屏幕外加载时加载其根视图控制器?【英文标题】:How can I make a navigation controller load its root view controller when it is loaded offscreen? 【发布时间】:2013-09-06 04:18:08 【问题描述】:我在我的应用程序中使用ECSlidingViewController 来实现侧抽屉效果。当我的初始视图加载时,可见视图后面有一个带有MKMapView 的隐藏视图控制器。需要从地图注释中分离出来,我不得不将我的地图视图控制器嵌入到导航控制器中。现在隐藏视图控制器是导航控制器而不是地图视图,因此我的地图仅在导航控制器出现在屏幕上后才会初始化。因此,在地图视图的 CLLocationManager 代表有时间响应位置之前调用了我的地图的 viewDidLoad
,它设置了区域。
我需要同步实例化我的导航控制器和根视图控制器。我只是手动segue,但我猜'rootViewController' 关系segue 有我会绕过的实现细节。
【问题讨论】:
【参考方案1】:这其实很简单,和segues无关。
我期待UINavigationController
对象上的rootViewController
属性同时俯瞰@property UIViewController* topViewController
。
所以在我的顶部(可见)导航控制器的viewWillAppear
:
// Load the map's navigation controller from storyboard
MyMapNavigationController* mapNavigation = [self.storyboard instantiateViewControllerWithIdentifier:mapNavigtionIdentifier];
// ECSlidingViewController API to set hidden view controllers
self.slidingViewController.underRightViewController = mapNavigation;
// Grab root view controller
MyMapController* map = mapNavigation.topViewController;
// Slightly hacky magic
[map view]; //lazily instantiated property will initialize view and controller when called.
【讨论】:
以上是关于如何让导航控制器在屏幕外加载时加载其根视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章
每次将视图控制器压入堆栈时,如何从 appDelegate 重新加载视图控制器?
如何创建导航控制器以将主视图控制器连接到 2 个自定义视图控制器