小编典典

iPhone上的UISplitViewController纵向显示详细VC而不是master

all

我在 Xcode 6 中使用通用故事板,针对 iOS 7 及更高版本。我已经实现了一个UISplitViewController现在在运行 iOS 8
的 iPhone 上本机支持的功能,Xcode 会自动将其向后移植到 iOS 7。它工作得非常好,除非你在运行 iOS 8 的 iPhone
上以纵向启动应用程序,拆分视图的详细视图当我希望第一次看到主视图控制器时会显示控制器。我认为这是 iOS 8 的错误,因为当您在 iOS 7
上运行应用程序时,它会正确显示主视图控制器。但是 iOS 8
现在是通用的,而且这种情况仍在发生。如何设置它,以便当拆分视图控制器将被折叠时(屏幕上仅显示一个视图控制器),当显示拆分视图控制器时,它显示主视图控制器而不是细节?

我在 Interface Builder 中创建了这个拆分视图控制器。拆分视图控制器是标签栏控制器中的第一个视图控制器。master 和 detail VC
都是导航控制器,其中嵌入了 table view 控制器。


阅读 105

收藏
2022-07-31

共1个答案

小编典典

哦,伙计,这让我头疼了几天,不知道该怎么做。最糟糕的是,使用 master-detail 模板创建一个新的 Xcode iOS
项目工作得很好。幸运的是,最后,这个小事实是我找到解决方案的方式。

我发现一些帖子表明解决方案是primaryViewControllerForCollapsingSplitViewController:UISplitViewControllerDelegate.
我试过没有用。Apple
在似乎有效的主从模板中所做的是实现新的(深吸一口气说所有这一切)splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:委托方法(再次上UISplitViewControllerDelegate)。根据文档,此方法:

要求代理调整主视图控制器并将辅助视图控制器合并到折叠界面中。

请务必阅读该方法的讨论部分以获取更多具体细节。

苹果处理这个问题的方式是:

- (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] detailItem] == 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;

    }
}

这个实现基本上做了以下事情:

  1. 如果secondaryViewController是我们所期待的(a UINavigationController),它显示了我们所期待的(a——DetailViewController你的视图控制器),但没有模型(detailItem),那么“ Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
  2. 否则,返回“NO让拆分视图控制器尝试将辅助视图控制器的内容合并到折叠界面中”

纵向 iPhone 的结果如下(从纵向开始或旋转到纵向 - 或更准确地说是紧凑尺寸类):

  1. 如果你的观点是正确的
    • 并有一个模型,显示详细视图控制器
    • 但没有模型,显示主视图控制器
  2. 如果你的观点不正确
    • 显示主视图控制器
2022-07-31