iPhone上的UISplitViewController:从详细视图控制器弹出/显示主视图

时间:2014-12-22 18:54:58

标签: ios objective-c iphone ios8

我正在使用新的iOS 8 UISplitViewController。如果我在iPhone上运行它我有以下问题:

我的主视图控制器触发要显示的详细视图控制器。详细视图控制器在详细视图中将新视图控制器推送到UINavigationController堆栈。

现在我遇到了问题,如果我想从新的视图控制器弹回主视图控制器。

我该怎么做

[self.navigatonController popToRootViewControllerAnimated:YES];

不起作用。 我想在iPhone上显示主视图控制器。所以我必须回顾两个观点。

我有什么想法可以做到这一点吗?

4 个答案:

答案 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)