Как правильно отклонить предыдущий вид контроллера - PullRequest
1 голос
/ 10 июля 2019

Извинения, насколько я знаю, есть некоторые похожие вопросы, но я искал две недели, чтобы найти каждый, который смог найти, и не могу понять (я новичок).

У меня есть несколько разных контроллеров представления, не использующих навигационный контроллер. Я могу между ними без проблем. Проблема в том, что каждый вид должен быть отклонен при переходе к новому. Вот кое-что из того, что я пробовал до сих пор.

Вариант 1 (в новом контроллере вида)

override func viewDidAppear(_ animated: Bool) {
    presentingViewController?.dismiss(animated: false, completion: nil)
}

Вариант 2 (в старом контроллере вида)

override func viewDidDisappear(_ animated: Bool) {
    self.dismiss(animated: false, completion: nil)
}

В обоих этих случаях новый вид отклоняется, и я возвращаюсь к старому. Я пробовал около 20 версий аналогичного кода.

Должен ли я использовать первый VC в моей программе в качестве моего "основного" контроллера представления и представлять / отклонять все остальные поверх него? Я не думал, что такой подход кажется эффективным с точки зрения памяти, когда «основной» VC не часто используется после начальной загрузки приложения.

Кажется, я что-то упускаю или не понимаю. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 10 июля 2019

Подумайте об этом так: контроллер вида не может существовать на острове. Это должно быть представлено сверху чего-то.

Это означает, что когда вы представляете один VC поверх другого, контроллер представления является «основой» для нового, который вы только что представили.

Если вы не хотите представлять виртуальные каналы друг над другом, у вас есть несколько вариантов:

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

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

3) Сделайте именно то, что вы сказали в своем посте (используйте контроллер корневого представления для представления / отклонения всех других VC). Как я уже сказал, вы не можете представить контроллер представления из воздуха - всегда должно быть что-то за этим. Если в вашем корневом VC не происходит множество вещей, это не должно вызывать проблем с памятью. Этот подход должен подойти, если вы не особенно внимательны к анимации между вашими контроллерами представления.

В общем, я бы не стал слишком беспокоиться об использовании памяти, пока это не станет проблемой. Должно быть хорошо представить контроллеры представления друг над другом для 99% случаев нормального использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...