Навигация по основному виду в режиме разделенного просмотра не работает с режимами отображения «Авто» или «primaryHidden» - PullRequest
0 голосов
/ 08 апреля 2019

Для моего приложения я создал разделенное представление, встроенное в представление контейнера, то есть разделенное представление не находится в корне приложения.

Как видно на изображении, я добавил навигациюк главному представлению, которое служит кнопкой возврата и выталкивает весь разделенный вид из основного стека навигации.

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {
    parent?.navigationController?.popViewController(animated: true)
}

Это хорошо работает на всех устройствах, когда я устанавливаю режим отображения разделенного вида на allVisible.Он работает как для свернутого вида (например, в портретном режиме iPhone), так и для расширенного раздельного вида.

enter image description here

Проблема: КогдаЯ использую другой режим отображения, такой как Auto или primaryHidden, кнопка навигации в главном представлении все еще показывает, но не работает в горизонтальном (расширенном) представлении.Обработчик кнопки вызывается, но оператор выше не уходит от разделенного представления.Кажется, что родительский навигационный контроллер не доступен таким образом (= ноль).Почему оператор не работает в некоторых режимах отображения и как я могу заставить его работать?

1 Ответ

0 голосов
/ 12 апреля 2019

Это кажется немного неуклюжим, но это делает работу.Лучшее решение может прийти из понимания, почему родительский навигационный контроллер доступен в некоторых режимах отображения, но не доступен в других.

Что происходит, работает через контроллер навигации подробного вида и удаляет его из стека.Режим отображения здесь изменен, чтобы предотвратить некрасивый эффект перехода.

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {

    if (splitViewController!.viewControllers.count > 1) {
        // master and detail visible in split view
        let detailViewController = splitViewController!.viewControllers[1]
        splitViewController!.preferredDisplayMode = .primaryHidden
        detailViewController.navigationController?.popViewController(animated: true)
    } else {
        // split view collapsed into single view mode (e.g. iPhone portrait)
        parent?.navigationController?.popViewController(animated: true)
    }
}
...