我有一个通用应用程序,它使用两个不同的 UISplitview 控制器来控制两个不同的主/详细信息集(一种数据类型嵌套在另一种中)。
我通过调用以下函数从第一个切换到另一个:
@IBAction func viewEntries(sender: AnyObject) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let entriesSplitView = storyboard.instantiateViewControllerWithIdentifier("entriesSplitView") as! UISplitViewController
entriesSplitView.delegate = self.appDelegate
UIView.transitionWithView(self.view.window!, duration: 0.25, options: .TransitionCrossDissolve, animations:
{
self.appDelegate.window?.rootViewController = entriesSplitView
}, completion: nil)
}
在这个辅助 UISplitView 的主视图控制器中,我设置了导航控制器的 leftBarButton 以触发类似的功能,以返回原始的、最顶层的 UISplitView。
我唯一的问题是我想确保在 iPhone 上,在此转换之后显示的第一个视图是详细视图控制器,但我希望首先是主视图控制器,然后才能查看详细信息。我可以通过添加来解决这个问题:
let masterNavigationController = entriesSplitView.viewControllers[0] as! UINavigationController
masterNavigationController.popToRootViewControllerAnimated(false)
之后 self.appDelegate.window?.rootViewController = entriesSplitView
,但是当我这样做时,会快速闪烁。如果我把它放在那个电话之前,它不会产生预期的效果。
关于确保主视图是第一个调用的正确方法的任何想法,同时还允许访问详细视图?