Есть ли способ переопределить popToRootViewControllerAnimated: вызывается нажатием на элемент панели вкладок?
Я хотел бы переопределить анимацию popToRootViewControllerAnimated: (в настоящее время: ДА), когда пользователь нажимает на тот же элемент панели вкладок, который уже выбран.
При первом касании элемента панели вкладок я проверяю, выполнил ли пользователь вход в viewWillAppear: метод корневого контроллера представления элемента панели вкладок, и, если нет, немедленно нажмите контроллер входа с отключенной анимацией.
controller.navigationItem.hidesBackButton = YES;
[self.navigationController pushViewController:controller animated:NO];
[controller release];
Когда пользователь успешно входит в систему, я возвращаюсь к корневому контроллеру, [анимация] не проблема:
[self.navigationController popViewControllerAnimated:YES];
Тем не менее, поведение по умолчанию при повторном нажатии на текущий элемент панели вкладок делает следующие вызовы:
-[UITabBarController _tabBarItemClicked:]
какие звонки
-[UINavigationController popToRootViewControllerAnimated:]
Я не могу сказать, передан ли ДА в тот последний, но предполагаю, что основанный на наблюдении. Если пользователь не входит в систему, но снова нажимает на элемент панели вкладок, похоже, что тот же контроллер [входа] толкается / всплывает с анимацией, так как viewDidLoad корневого контроллера просто толкает контроллер входа снова, Я бы хотел, чтобы анимация была в этом случае НЕТ.
Чтобы добавить к моим проблемам, существуют другие стеки навигации, в которые можно нажать контроллер входа в систему, и уместно нажать на элемент панели вкладок, чтобы перейти к корневому контроллеру. Я реализовал протокол UITabBarControllerDelegate и tabBarController:shouldSelectViewController: в контроллере входа, чтобы проверить, совпадает ли корневой контроллер элемента с повернутой панелью и является ли этот контроллер классом контроллера, который я хочу использовать в особом случае, но он выглядит не элегантным. Не только это, но и теперь контроллер входа должен знать о классе контроллера, который может поместить его в стек навигации. Хотя я могу продолжать использовать метод протокола, должен быть лучший способ сделать это.
Спасибо за ваш вклад и идеи!
1 ответ
Я думаю, что лучшим решением этой проблемы было бы представление модального контроллера представления, когда кнопка панели вкладок выбрана, и затем возвращение НЕТ. Из метода делегата.