0

我正在编写一个在 iPhone 6 上运行的应用程序,并像这样使用 UISplitViewController:

在此处输入图像描述

当我在 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"];

该应用程序将显示如下:

在此处输入图像描述

如果现在我将应用程序更改为纵向,运行此代码后它将崩溃(返回 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

谢谢你。

4

1 回答 1

0

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

至于视图控制器层次结构的设置,看起来您可能会将视图控制器与视图混淆。如果您想要两个简单UITableViews的并排放置,为什么不同时创建主视图控制器和详细视图控制器实例,UITableViewController而不是尝试将UITableViewControllers嵌入到UIViewControllers 中?

使用您的符号和类,这看起来像这样:

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

注:“segue”意为“过渡”。segue 将决定用户如何从一个视图控制器到下一个视图控制器;它没有描述如何将一个视图控制器嵌入到另一个视图控制器中。

于 2014-10-30T19:09:03.493 回答