iPhone上的肖像中的UISplitViewController显示详细的VC而不是master

我正在Xcode 6中使用Universal Storyboard,目标是iOS 7及更高版本。我已经实现了一个UISplitViewController,现在在运行iOS 8的iPhone上本机支持,而Xcode会自动将其移植到iOS7。它运行得非常好,除了当您在运行iOS 8的iPhone上以肖像模式启动该应用程序时,拆分视图的详细视图当我希望第一次看到主视图控制器时,将显示controller。我认为这是iOS 8的错误,因为当您在iOS 7上运行该应用程序时,它会正确显示主视图控制器。但是iOS 8现在是通用汽车,并且这种情况仍在发生。我如何设置它,以便在将拆分视图控制器折叠时(屏幕上仅显示一个视图控制器),在显示拆分视图控制器时,它显示主视图控制器而不显示详细信息?

我已经在Interface Builder中创建了此拆分视图控制器。拆分视图控制器是选项卡栏控制器中的第一个视图控制器。主VC和详细VC都是导航控制器,其中嵌入了表视图控制器。


慕田峪4524236
浏览 898回答 3
3回答

HUWWW

哦,老兄,这让我头疼了好几天,无法弄清楚该怎么做。最糟糕的是,使用master-detail模板创建一个新的Xcode iOS项目效果很好。幸运的是,最后,几乎没有什么是我找到解决方案的方法。我发现有一些帖子建议解决方案是在上实现新primaryViewControllerForCollapsingSplitViewController:方法UISplitViewControllerDelegate。我尝试了一下都无济于事。Apple在似乎有效的主从模板中所做的工作是实现新的(深呼吸地说所有这一切)splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:委托方法(再次UISplitViewControllerDelegate)。根据docs,此方法:请委托人调整主视图控制器,并将辅助视图控制器合并到折叠的界面中。确保阅读该方法的讨论部分以获取更多具体细节。Apple处理此问题的方式是:- (BOOL)splitViewController:(UISplitViewController *)splitViewControllercollapseSecondaryViewController:(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;    }}此实现基本上执行以下操作:如果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.“否则,返回“ NO让拆分视图控制器尝试将辅助视图控制器的内容合并到折叠的界面中”对于纵向模式的iPhone(以纵向模式开始或旋转为纵向模式或更精确的紧凑尺寸级别),结果如下:如果你的观点是正确的并有一个模型,显示细节视图控制器但没有模型,请显示主视图控制器如果你的观点不正确显示主视图控制器清澈如泥。

慕标5832272

这是Swift中公认的答案。只需创建此子类并将其分配到情节提要中的splitViewController。//GlobalSplitViewController.swiftimport UIKitclass GlobalSplitViewController: UISplitViewController, UISplitViewControllerDelegate {  override func viewDidLoad() {    super.viewDidLoad()    self.delegate = self  }  func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController!, ontoPrimaryViewController primaryViewController: UIViewController!) -> Bool{    return true  }}

holdtom

迅捷版Mark S的正确答案如Apple的主从模板所提供。func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController:UIViewController, ontoPrimaryViewController primaryViewController:UIViewController) -> Bool {    guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }    guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }    if topAsDetailController.detailItem == nil {        // Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.        return true    }    return false}澄清度(Mark S所说的有点令人困惑)该委托方法称为splitViewController: collapseSecondaryViewController: ontoPrimaryViewController:,因为它就是这样做的。当更改为更紧凑的宽度尺寸时(例如,将手机从横向旋转到纵向时),它需要将拆分视图控制器仅折叠为其中一个。此函数返回一个布尔值,以决定是否应折叠Detail并显示Master。因此,在本例中,我们将根据是否选择了详细信息来决定。我们如何知道是否选择了我们的详细信息?如果我们遵循Apple的Master-Detail模板,则详细视图控制器应具有一个包含详细信息的可选变量,因此如果它为nil(.None),则没有任何选择,我们应该显示Master,以便用户可以选择某些内容。而已。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS