Допустим, у меня есть приложение UIButton
с одной вкладкой в приложении для iPhone, и я хочу, чтобы оно открывало другую вкладку на панели вкладок TabBarController
. Как бы я написал код для этого?
Я предполагаю, что я выгружаю существующее представление и загружаю определенное представление вкладки, но я не уверен, как написать код точно.
iphone
objective-c
ios
uitabbarcontroller
rottendevice
источник
источник
Ответы:
Попробуйте этот код в Swift или Objective-C
стриж
Objective-C
источник
-setSelectedViewController:
.Обратите внимание, что вкладки индексируются начиная с 0. Таким образом, работает следующий фрагмент кода
идет к пятой вкладке в панели.
источник
Мое мнение таково, что
selectedIndex
использованиеobjectAtIndex
не обязательно является лучшим способом переключения вкладки. Если вы переупорядочиваете свои вкладки, выбор жестко закодированного индекса может испортить ваше прежнее поведение приложения.Если у вас есть ссылка на объект контроллера представления, на который вы хотите переключиться, вы можете сделать:
Конечно, вы должны убедиться, что
myViewController
действительно есть в спискеtabBarController.viewControllers
.источник
Вы можете просто установить для
selectedIndex
свойства UITabBarController соответствующий индекс, и представление будет изменено так же, как пользователь нажал кнопку вкладки.источник
selectedIndex
также не работает для меня с индексами> 4, ноselectedViewController
работает.Я попробовал то, что предложил Disco S2, это было близко, но это то, что в итоге сработало для меня. Это было вызвано после выполнения действия внутри другой вкладки.
источник
Для случаев, когда вы можете перемещать вкладки, вот некоторый код.
источник
Как и решение Стюарта Кларка, но для Swift 3:
Используйте это так:
Обратите внимание, что моя tabController ссылается на viewController за навигационными контроллерами. Без navigationControllers это выглядело бы так:
источник
Я хотел иметь возможность указать, какая вкладка должна отображаться по классу, а не по индексу, так как я думал, что это дает надежное решение, которое в меньшей степени зависит от того, как вы подключите IB. Я не нашел ни решения Disco, ни Joped для работы, поэтому я создал этот метод:
Вы называете это так:
Надеюсь, это кому-нибудь пригодится
источник
Моя проблема немного отличается, мне нужно переключиться с одного childViewController в 1-й tabBar на домашний viewController 2-й tabBar. Я просто использую решение, предоставленное наверху:
Однако, когда он переключился на домашнюю страницу 2-й вкладки, контент становится невидимым. И когда я отлаживаю, viewDidAppear, viewWillAppear, viewDidLoad, ни один из них не вызывается. Я решил добавить следующий код в UITabBarController:
источник
Использовать в
AppDelegate.m
файле:источник
Как и решение Стюарта Кларка, но для Swift 3 и использования идентификатора восстановления, чтобы найти правильную вкладку:
Используйте его следующим образом («Люди» и «Роботы» также должны быть установлены в раскадровке для определенного viewController и его идентификатора восстановления, или используйте идентификатор раскадровки и отметьте «использовать идентификатор раскадровки» в качестве идентификатора восстановления):
Обратите внимание, что моя tabController ссылается на viewController за навигационными контроллерами. Без navigationControllers это выглядело бы так:
источник
источник