Я программно настраиваю UISplitViewController. Этот код автоматически переходит к detailViewController, что является нежелательным поведением. Вместо этого я хотел бы представить masterViewController и позволить пользователю выбрать detailViewController с didSelectRowAt IndexPath
. Любая помощь приветствуется.
let splitViewController = UISplitViewController(nibName: nil, bundle: nil)
let masterNavigationController = UINavigationController(rootViewController: MasterViewController(nibName: nil, bundle: nil))
let detailNavigationController = UINavigationController(rootViewController: DetailViewController(nibName: nil, bundle: nil))
splitViewController.viewControllers = [masterNavigationController, detailNavigationController]
present(splitViewController, animated: true, completion: nil)
Реализуйте метод UISplitViewControllerDelegate
splitViewController(_:showDetail:sender:)
(документация здесь), чтобы переопределить поведение вашего разделенного vc.
В вашем конкретном случае он должен возвращать true все время, кроме того времени, когда изначально отображается разделенный vc. В этом случае вы можете настроить переменную флага, например
var isInitialState: Bool = true
затем установите для него значение false, как только разделенный vc будет полностью представлен - здесь я не уверен, когда будет лучшее время, но я бы предположил
override func viewDidAppear(_ animated: Bool) {
[...]
isInitialState = false
[...]
}
Спасибо. Это не сработало для меня, но привело меня к решению, которое заключалось в использовании
splitViewController(_ splitViewController: collapseSecondary secondaryViewController:onto primaryViewController:)
.