UISplitViewController - 以折叠模式在代码中解除/弹出详细视图控制器

SFF*_*SFF 11 iphone objective-c uisplitviewcontroller ios

从iOS8开始,我们可以在紧凑型和常规设备上使用UISplitViewController.这很棒,因为我不需要为iPhone和iPad创建两个不同的故事板,但是我遇到了一个问题.

如果拆分视图控制器在iPad上(如果折叠属性为NO),我可以简单地调用它来显示左侧的MasterVC.

self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay;
[self.splitViewController.displayModeButtonItem action];
Run Code Online (Sandbox Code Playgroud)

但如果它在iPhone上(如果折叠属性为YES),则忽略displayMode,并且不执行任何操作.

我无法弹出DetailVC,popToRootViewControllerAnimated因为DetailVC拥有自己的导航控制器.

如果没有像dismissViewControllerAnimated:completion:showDetail 一样的视图控制器的方法,Apple如何期望我们在折叠模式下的代码中显示MasterVC(关闭DetailVC)?我们将不胜感激.谢谢

pNr*_*Nre 21

在不支持"拆分"模式的设备上,如果

  1. 你想展示视图控制器代替的细节UISplitViewController首先加载,然后回到YES你的委托类(UISplitViewControllerDelegate)splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:方法的方法应该这样做:

    - (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController {
        return YES;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您希望在特定事件(例如,按下按钮)之后将详细视图控制器关闭控制器.在这种情况下,您必须弹出详细视图控制器导航控制器:

    [detailViewController.navigationController.navigationController popToRootViewControllerAnimated:YES]
    
    Run Code Online (Sandbox Code Playgroud)

  • @SFF您是否尝试过弹出详细导航控制器的父导航控制器?像`[detailViewController.navigationController.navigationController popToRootViewControllerAnimated]`这样的东西. (3认同)

Coc*_*aEv 6

今天有一个类似的问题试图从拆分视图控制器中的详细视图弹回.

虽然我确信接受的答案工作正常,但我发现另一种方法也可以使用,并且可能更清洁一点就是使用展开的segue.

我在我想要返回的主视图上设置了一个展开segue,然后从我想要弹出的视图中创建了一个指向展开segue的segue链接(注意:假设您正在使用故事板).

确保在弹出的目标视图上设置IBAction:

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue { }
Run Code Online (Sandbox Code Playgroud)

将出口连接到故事板中的segue以进行展开segue.对不起,我没有提供很多关于如何设置unwind segue的细节,但是有很多教程可供选择.

然后在你想要解除的控制器上,将一个segue连接到你弹出的控制器的展开segue.一定要命名segue.

然后在要关闭的视图控制器中的按钮触摸,只需调用

[self performSegueWithIdentifier:@"unwindSegueName" sender:self];
Run Code Online (Sandbox Code Playgroud)

这非常有效,可以避免向后挖掘可能会发生变化的导航层次结构.

希望这对某人有用!节日快乐!