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

Mat*_*att 20 iphone objective-c ios ios8

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

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

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

我怎样才能做到这一点

[self.navigatonController popToRootViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

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

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

Jim*_*des 34

UIViewControllers有一个"splitViewController"属性,所以你可以通过它获得对相应导航控制器的引用 - 然后调用popViewControllerAnimated.

这是在Swift中(包含在详细视图控制器中的某个地方):

if let navController = splitViewController?.viewControllers[0] as? UINavigationController {
    navController.popViewControllerAnimated(true)
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 9

我刚刚在Apple开发者论坛上找到了一个解决方案: 如何在iPhone上的UISplitViewController中手动"弹出"回MasterViewController

旧的(可能仍然有效)建议是让主视图启动'pop'.为了做到这一点,详细视图需要通知主视图有关按下自定义按钮的信息.这可以通过定义一个来实现.协议,其中主视图是委托,详细视图有一个名为'委托'的变量.当主控推送详细视图时,它将此委托变量设置为self.现在详细视图有一个钩子来通知主视图.

这意味着从(子)详细视图控制器调用主视图控制器方法:

(子)细节视图控制器:

UINavigationController *navCon = [self.splitViewController.viewControllers objectAtIndex:0];
MyPrimaryViewController *primary = [navCon.viewControllers objectAtIndex:0];

[primary popToMaster];
Run Code Online (Sandbox Code Playgroud)

主视图控制器:

- (void)popToMaster
{
    [self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)


Fré*_*dda 0

我有完全相同的问题!据我了解,splitViewController“看起来”像iPhone上的navigationController(“折叠”splitVC),但detailVC实际上不再与masterVC位于同一导航堆栈上。这就是为什么您的“popToRootViewController”消息不再起作用的原因。

暂时我还没有找到办法。如果我找到解决方案,我会告诉你。