UISplitViewController在iPhone设备上显示详细视图而不是主设备

时间:2018-01-30 11:25:03

标签: ios iphone swift uisplitviewcontroller

我已经实现了一个UISplitViewController,一切正常。我想要做的是在iPhone设备上只显示detailView而不是masterView作为第一个视图控制器。我意识到我可以在主视图viewDidLoad方法中从主视图到详细视图创建一个segue,但是这对我来说有点笨拙。也许这是实现我想要的唯一途径?

我已经查看了UISplitViewControllerDelegate的文档,特别是这个函数,但是我觉得我并没有意识到这实际上是在做什么。我还将UISplitViewController设置为委托并设置allVisible并尝试了我的SplitViewController子类的viewDidLoad中的所有其他选项

self.delegate = self
self.preferredDisplayMode = .allVisible

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
     return true
}

如果它有助于故事板中的detailViewController heirachy是SplitViewController> UINavigationController> myDetailViewController

1 个答案:

答案 0 :(得分:0)


您需要做的是使用splitviewcontroller委托函数
func splitViewController(_ splitViewController:UISplitViewController,collapseSecondary secondaryViewController:UIViewController,on primaryViewController:UIViewController) - >布尔
在那里,您可以将第二个控制器推入第一个导航控制器并返回true。返回true表示您将处理转换。 e.g。

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool { 
if let detailViewController = secondaryViewController as? YourSecondViewController, let primaryNV = primaryViewController as? UINavigationController  {
   primaryNV.pushViewController(detailViewController, animated: false)
   returns true // I handle it myself.
  }
  return false // let the iOS handles it.
}

如果您需要更多说明,请告诉我。我会尝试更好地解释它。欢呼!