Есть ли способ переопределить 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 ответ

Я думаю, что лучшим решением этой проблемы было бы представление модального контроллера представления, когда кнопка панели вкладок выбрана, и затем возвращение НЕТ. Из метода делегата.

Другие вопросы по тегам