Как плавно переключаться между вкладками с вложенными UINavigationControllers и удалять предыдущие представления из стекIOS

Программируем под IOS
Ответить
Anonymous
 Как плавно переключаться между вкладками с вложенными UINavigationControllers и удалять предыдущие представления из стек

Сообщение Anonymous »

Это старая проблема, с которой я давно не сталкивался, но сейчас я возвращаюсь к ней и нуждаюсь в помощи. Я работаю над приложением для iOS, используя UIKit и раскадровки, и столкнулся с проблемой, из-за которой при переключении между вкладками представления из стека UINavigationController предыдущей вкладки остаются видимыми в пользовательском интерфейсе, хотя они и не должны.
Проблема:
Вкладка 1: у меня есть UINavigationController внутри первой вкладки. Внутри этого контроллера навигации я помещаю несколько контроллеров представлений в стек навигации, создавая «стек» представлений.
Вкладка 2: у меня есть еще одна вкладка с собственным UINavigationController. Когда я переключаюсь с вкладки 1 на вкладку 2, предыдущий стек навигации (из вкладки 1) остается видимым, в результате чего контроллер корневого представления новой вкладки не отображается должным образом.
Цель:
Я хочу плавно переключаться между вкладок, гарантируя, что при переключении с одной вкладки на другую представления из стека навигации предыдущей вкладки будут очищены. Переход должен выглядеть плавным: UINavigationController новой вкладки обрабатывает навигацию из своего корневого контроллера представления.
Настройка:
Я использую раскадровки для настройки представлений.
Я использую собственный подкласс UITabBarController для управления логикой панели вкладок.
Каждая вкладка имеет свой собственный UINavigationController в качестве корневого контроллера представления.
Диаграмма для лучшего понимания понимание:

Код: Выделить всё

Tab 1 (with UINavigationController)

+---------------------------------------------------------+

| Root ViewController                                      |
| +--------------------------------+                       |
| | VC 1                           |                       |
| +--------------------------------+                       |
| | VC 2                           |                       |
| +--------------------------------+                       |
| | VC 3                           |                       |
| +--------------------------------+                       |
+---------------------------------------------------------+

Tab 2 (with UINavigationController)
+---------------------------------------------------------+
| Root ViewController                                   |
| +--------------------------------+                       |
| | VC A                           |                       |
| +--------------------------------+                       |
| | VC B                           |                       |
| +--------------------------------+                       |
+---------------------------------------------------------+
Что мне нужно:
Когда я переключаюсь с вкладки 1 (с VC 3 на вершине стека) на вкладку 2, я хочу, чтобы представления из UINavigationController вкладки 1 были удалены , и я хочу начать заново с корневого контроллера представления навигационного контроллера Tab 2.
Моя попытка:
Я пробовал использовать popToRootViewController(animated: true) при выборе вкладки, но это не работает должным образом, поскольку стек навигации не очищается достаточно быстро для перехода, и я все еще вижу предыдущие представления.
Вопрос:Как я могу гарантировать, что предыдущий стек навигации очищается при переключении вкладок, чтобы на новой вкладке отображался контроллер корневого представления без каких-либо задержек со старой вкладки?
Как я могу сделать переключение вкладок плавным и естественно, поэтому это похоже на правильный переход между вкладки?
Ожидаемое поведение:
При переключении вкладок контроллеры представления предыдущей вкладки (в стеке UINavigationController) должны быть удалены.
На новой вкладке должен отображаться ее корень. контроллер представления без каких-либо ранее отправленных представлений из старой вкладки.
При переключении вкладок контроллеры представления предыдущей вкладки (в стеке UINavigationController) должны быть удалены.
Новый tab должен отображать свой корневой контроллер представления без каких-либо ранее отправленных представлений со старой вкладки.

Подробнее здесь: https://stackoverflow.com/questions/792 ... s-and-remo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»