如何在屏幕外加载导航控制器时加载其根视图控制器?

时间:2013-09-06 04:18:09

标签: ios cocoa-touch uinavigationcontroller ecslidingviewcontroller

我在我的应用程序中使用ECSlidingViewController作为侧抽屉效果。当我的初始视图加载时,隐藏的视图控制器在可见视图后面有MKMapView。需要从地图注释中删除,我不得不将我的地图视图控制器嵌入到导航控制器中。既然隐藏的视图控制器是导航控制器而不是地图视图,所以我的地图只有在导航控制器出现在屏幕上后才会初始化。因此,在地图视图的CLLocationManager委托有时间回复某个位置之前,我会调用设置区域的地图viewDidLoad

我需要同步实例化我的导航控制器和根视图控制器。我只是手动segue,但我猜'rootViewController'关系segue有我将绕过的实现细节。

1 个答案:

答案 0 :(得分:5)

这实际上非常简单,与segues无关。

我在rootViewController对象上看到了UINavigationController属性,同时忽略了@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.