Мое приложение имеет 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. В этом случае я вижу, что он вызывается при запуске приложения, но он НЕ вызывается при ротации устройства пользователем.