UISplitViewController объект по умолчанию для детализированного контроллера представления при вращении - PullRequest
0 голосов
/ 11 июня 2019

Мое приложение имеет UISplitViewController с UITableViewController в качестве основного представления, которое переходит к контроллеру подробного представления. Это нормально работает при нормальной работе. Но я сталкиваюсь с проблемами на устройствах, которые переходят из свернутого вида в портретном режиме в разделенный вид в альбомном режиме (например, iPhone X). Если пользователь просматривает представление основной таблицы в портретном режиме, тогда для детали еще не выбран объект. Если устройство поворачивается в этом состоянии, VC Detail отображается принудительно без показа какого-либо объекта.

Поскольку никакого вызова не вызывается, как я могу захватить событие поворота или иным образом убедиться, что мой главный виртуальный канал передает объект в подробный виртуальный канал для отображения, или установить его на ноль, если объект недоступен?

Контроллер полученных результатов находится в главном виртуальном канале. Когда начинает отображаться (пустой) VC Detail, вызываются ViewDidLoad и ViewWillAppear, и я могу обнаружить, что для него нет объекта для отображения. Это не то место, где можно оглянуться назад на контроллер выбранных результатов, чтобы получить объект по умолчанию (как и в случае с IndexPath (строка: 0, раздел: 0)). Также возможно, что в таблице еще нет данных, поэтому, возможно, самое простое решение - сделать Detail VC равным нулю. Но как только я обнаружил проблему в ViewDidLoad, уже слишком поздно, чтобы Detail VC не существовал.

Я попытался установить для UISplitViewControllerDelegate значение self в Master VC, чтобы я мог использовать эту функцию протокола для обнаружения вращения:

  func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) {
    print("Split view delegate notified! Will change to \(displayMode)")
}

Но эта функция не вызывается при повороте устройства. Я также попытался поместить эту функцию в AppDelegate, который уже является UISplitViewControllerDelegate. В этом случае я вижу, что он вызывается при запуске приложения, но он НЕ вызывается при ротации устройства пользователем.

...