具有主视图的UISplitViewController具有2个表视图

时间:2014-10-30 18:53:09

标签: objective-c ios8 uisplitviewcontroller iphone-6-plus

我正在编写在iPhone 6上运行的应用程序,并使用UISplitViewController,如下所示:

enter image description here

当我在iPhone 6 plus上纵向测试时,不会显示DetailView。如果我打开Table2View然后我改为横向,左边的Table1View显示和右边的Table2View显示。 我想要左边的Table2View显示和右边的DetailView显示。我该怎么办?

解决方案:我在此处找到了解决方案:UISplitViewController Rotation Master Master on iPhone 6 Plus。这是我的代码:

- (UIViewController *)splitViewController:(UISplitViewController *)splitViewController
separateSecondaryViewControllerFromPrimaryViewController:(UIViewController *)primaryViewController {
    if ([primaryViewController isKindOfClass:[UINavigationController class]]) {
        UIViewController *topViewController = [(UINavigationController *)primaryViewController topViewController];
        if ([topViewController isKindOfClass:[Table2ViewController class]]) {
            return [topViewController.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
        }
    }

    return nil;
}

但现在我得到了其他问题。使用以下代码:

return [topViewController.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];

该应用将显示如下:

enter image description here

如果现在我将应用更改为肖像,则在运行此代码后会崩溃(返回NO):

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController {
    if ([secondaryViewController isKindOfClass:[UINavigationController class]] && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]] && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] item] == nil)) {
        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return YES;
    }
    else {
        return NO;
    }
}

我认为问题是添加的DetailViewController无效。我该如何解决?

解决方案:我也解决了这个问题。这是一个完美的样本:https://developer.apple.com/library/prerelease/ios/samplecode/AdaptivePhotos/Introduction/Intro.html#//apple_ref/doc/uid/TP40014636

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您希望UISplitViewController管理的两个视图控制器在任何方向都可见,则需要将其preferredDisplayMode设置为UISplitViewControllerDisplayModeAllVisible

对于视图控制器层次结构的设置,看起来您可能会将视图控制器与视图混淆。如果您希望两个简单的UITableViews彼此相邻,为什么不同时使UITableViewController的主视图和详细视图控制器实例,而不是尝试在UITableViewController中嵌入UIViewController } S'

使用您的符号和类,这将是这样的:

UISplitViewController --masterview--> Table1ViewController
UISplitViewController --detailview--> Table2ViewController

注意:" segue"意味着"过渡。" segue将确定用户从一个视图控制器到下一个视图控制器的方式;它没有描述一个视图控制器如何嵌入另一个视图控制器。