Выдвижение контроллера навигации в панели вкладок - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть панель вкладок MainViewController с несколькими кнопками панели вкладок, первая из которых - View 1, представляющая собой контроллер навигации со стеком до 3 или 4 дочерних элементов. Последняя кнопка панели вкладок - SettingsViewController, с функцией, похожей на 'Logout' внутри, которая вызывает метод в AppDelegate, который удаляет MainViewController и отправляет пользователя обратно на страницу входа.

При нажатии кнопки выхода из системы на SettingsViewController я хочу, чтобы AppDelegate установил для выбранной вкладки значение View 1 (что я сделал), отправьте пользователя обратно в представление входа в систему (также выполнено), а также popToRootViewController на View 1 с которой я борюсь.

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

Моя последняя попытка:

// Fine
mainViewcontroller.tabBarController.selectedIndex = 0;

// Not so fine
NSArray *allViewControllers = [mainViewcontroller.tabBarController viewControllers];
View1 *vc = [allViewControllers objectAtIndex:0];
[vc.navigationController popToRootViewControllerAnimated:NO];

Еще одна попытка просто перебрать все контроллеры представления на вкладке и получить доступ к корню, который, похоже, тоже не работает:

for (UIViewController *viewController in mainViewcontroller.tabBarController.viewControllers)
{
    [viewController.navigationController popToRootViewControllerAnimated:NO];
}

Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

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

0 голосов
/ 23 февраля 2012

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

Чтобы преодолеть это, я бы остановил ваш текущий метод при установке selectedIndex. Однако ранее я бы установил флаг, указывающий, что приложение должно вернуться к корню, т. Е. Bool shouldPopBackToRoot = true;

Затем в viewDidAppear viewControllers проверьте этот флаг, чтобы увидеть, должны ли они popBackToRoot, и если да, то сделайте popToRootViewController из viewDontAppear viewController (и не забудьте сбросить mustPopBackToRoot обратно в false).

...