#ios #swift #ios13
#iOS #swift #ios13
Вопрос:
У меня есть всплывающее окно, которое представляет собой просто стек UIButtons.
Всплывающее окно отображается из контроллера просмотра (записей), который сам находится внутри NavigationController.
Мне нужны кнопки во всплывающем окне, чтобы иметь возможность размещать другие представления поверх стека навигации. Вот как я готовлю переход для всплывающего окна в контроллере просмотра записей:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "popoverSegue" {
let dest = segue.destination as! PopoverViewController
dest.navController = navigationController
dest.modalPresentationStyle = .popover
dest.popoverPresentationController?.barButtonItem = addButton
dest.popoverPresentationController?.delegate = self
}
}
Затем внутри popoverViewController я получил кучу функций IBAction, где мне нужно добавить другие представления поверх navController
, которые были установлены выше.
let editor = EditorViewController(nibName: "EditorViewController", bundle: nil)
navController?.pushViewController(editor, animated: true)
Этот kina работает, и в окне редактора отображается панель навигации и все такое, но как только я нажимаю на вид или пытаюсь прокрутить, он просто отклоняется.
Как я могу предотвратить это отклонение? Я попытался настроить isModalInPresentation
. У меня это не сработало.
Комментарии:
1. Ваш контроллер «всплывающего окна» должен сообщить контроллеру, который его представил, чтобы поместить новый контроллер в стек. Вы можете сделать это либо с помощью шаблона протокола / делегирования, либо с помощью замыканий. Однако вы говорите, что недавно введенный контроллер «отклоняется» ? Вы имеете в виду нажатие на него или попытку прокрутки «всплывающих окон» обратно к вашему контроллеру записей?
2. @DonMag Спасибо! это сработало!
3. @DogMag если бы вы могли опубликовать это в качестве ответа, я был бы рад пометить это как принятый ответ
Ответ №1:
Отвечаю, согласно комментариям OP…
Правильный подход заключается в том, чтобы ваш контроллер «всплывающего окна» сообщал представляющему контроллеру, чтобы он поместил новый VC в стек навигации.
Это можно сделать несколькими различными способами, но чаще всего с использованием шаблона протокола / делегирования или с закрытием.