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

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 重新加载视图控制器?

将单独的 xib 视图控制器加载到情节提要导航中[重复]

如何创建导航控制器以将主视图控制器连接到 2 个自定义视图控制器

在 iPad 端口中管理视图控制器

从其他视图控制器加载 uitableview 时禁用/启用 uitableviewcell 的内容

加载视图时导航栏跳跃