我正在使用新的iOS 8 UISplitViewController。如果我在iPhone上运行它我有以下问题:
我的主视图控制器触发要显示的详细视图控制器。详细视图控制器在详细视图中将新视图控制器推送到UINavigationController堆栈。
现在我遇到了问题,如果我想从新的视图控制器弹回主视图控制器。
我该怎么做
[self.navigatonController popToRootViewControllerAnimated:YES];
不起作用。 我想在iPhone上显示主视图控制器。所以我必须回顾两个观点。
我有什么想法可以做到这一点吗?
答案 0 :(得分:32)
UIViewControllers有一个" splitViewController"属性,所以你可以通过它获得对相应导航控制器的引用 - 然后调用popViewControllerAnimated。
这是在Swift中(包含在详细视图控制器中的某个地方):
if let navController = splitViewController?.viewControllers[0] as? UINavigationController {
navController.popViewControllerAnimated(true)
}
答案 1 :(得分:8)
我刚刚在Apple Developer Forum上找到了解决方案: How to manually 'pop' back to MasterViewController in UISplitViewController on iPhone
旧的(可能仍然有效)建议是让主人 查看' pop"。为了做到这一点,细节视图需要 告知主视图有关按下自定义按钮的信息。这个可以 通过定义一个协议来实现,其中主视图是 委托和详细视图有一个名为' delegate'的变量。什么时候 主人推送它将此委托变量设置为的详细信息视图 自。现在详细视图有一个钩子来通知主视图。
这意味着从(子)详细视图控制器调用主视图控制器方法:
(Sub)细节视图控制器:
UINavigationController *navCon = [self.splitViewController.viewControllers objectAtIndex:0];
MyPrimaryViewController *primary = [navCon.viewControllers objectAtIndex:0];
[primary popToMaster];
主视图控制器:
- (void)popToMaster
{
[self.navigationController popViewControllerAnimated:YES];
}
答案 2 :(得分:0)
我有完全相同的问题! 据我所知,splitViewController"看起来"就像iPhone上的navigationController一样("折叠" splitVC),但detailVC实际上不再与masterVC在同一个导航堆栈上。这就是你的" popToRootViewController"消息不再起作用。
目前,我找不到方法。我会告诉你我是否找到了解决方案。
答案 3 :(得分:0)
此解决方案适用于iPhone。我将UINavigationViewController用作UISplitViewController的详细信息视图控制器。据我所知的原因
detailViewController.navigationController?.popToRootViewController(animated: true)
不起作用是因为导航控制器的根视图控制器不是主视图控制器。拆分视图控制器是我的detailViewController(UINavigationController)的“导航控制器”。
我称其为“弹出至主视图控制器”:
detailViewController.navigationController?.navigationCont
roller.popToRootViewController(animated: true)