在iPhone 6 Plus上拆分视图控制器旋转

Ber*_*lue 5 uisplitviewcontroller ios8 iphone-6-plus

我在横向模式下有一个带有两个导航控制器的分割视图控制器.

在此输入图像描述

这会以纵向折叠到单个导航控制器,并从主控制器推送详细视图控制器.

在此输入图像描述

如果我在纵向按下细节视图控制器时旋转回横向,我不明白如何将细节视图控制器放回到它自己的导航控制器中.

在此输入图像描述

mix*_*y87 5

您应该实现 UISplitViewControllerDelegate。最简单的方法可能是拥有自己的 MySplitViewController 类并将其自身设置为 viewDidLoad 中的委托:

self.delegate = self;
Run Code Online (Sandbox Code Playgroud)

首先,您可能希望 showDetailViewController 看起来像:

- (BOOL) splitViewController:(UISplitViewController*)splitViewController showDetailViewController:(UIViewController*)vc sender:(id)sender
{
    if (splitViewController.collapsed)
    {
        [(UINavigationController*)splitViewController.viewControllers[0]) pushViewController:vc animated:YES];
    }
    else
    {
        self.viewControllers = @[ self.viewControllers.firstObject, vc ];
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

这应该注意在两个方向上正确显示详细信息视图。

接下来,您应该实现以下与此类似的委托方法:

    - (UIViewController*)                splitViewController:(UISplitViewController*)splitViewController
separateSecondaryViewControllerFromPrimaryViewController:(UIViewController*)primaryViewController
{
    UINavigationController* nc = primaryViewController;
    UIViewController* detailVC = nc.viewControllers.lastObject;
    return detailVC;
}
Run Code Online (Sandbox Code Playgroud)

此方法是您从主控制器获取所需内容并将其作为详细视图控制器返回的机会。上面的示例代码相当简单,您可能需要遍历导航视图控制器并从特定视图控制器开始选择所有内容(假设您从详细信息视图进行推送)。

无论如何,花一些时间阅读:UISplitViewController 类参考,特别是UISplitViewControllerDelegate 协议参考, 这确实是值得的,这会更清晰。如果您想要快捷方式,请查看 Xcode 拆分视图控制器模板项目。该内容还应该包含您问题的提示或确切解决方案。