Как получить индекс определенного UIViewController в UITabBarController - PullRequest
0 голосов
/ 13 апреля 2019

Итак, программное переключение с одной вкладки в UITabBarController на другую достаточно просто ...

self.tabBarController?.selectedIndex = 1

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

Есть ли способ получить [первый] индекс определенного UIViewController, чтобы код мог быть похож на следующий?

if let destinationIndex = self.tabBarController?.index(of: ExampleViewController) {
    self.tabBarController?.selectedIndex = destinationIndex
}

Ответы [ 3 ]

2 голосов
/ 13 апреля 2019

Вы захотите использовать метод firstIndex(where:).

if let destinationIndex = self.tabBarController?.viewControllers.firstIndex(where: { $0 is ExampleViewController }) {
    self.tabBarController?.selectedIndex = destinationIndex
}
0 голосов
/ 14 апреля 2019

Для тех, к кому это относится, ответ от @ Крейга Сименса , адаптированный для случаев, когда целевой VC встроен в контроллер навигации:

if let destinationIndex = self.tabBarController?.viewControllers?.firstIndex(where: {
    let navController = $0 as? UINavigationController
    return navController?.viewControllers.first is ExampleViewController
}) {
    self.tabBarController?.selectedIndex = destinationIndex
}
0 голосов
/ 13 апреля 2019

Создайте перечисление для элементов панели вкладок.

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

enum TabbarVCs: Int {
 case home
 case settings
 case profile
}

tabBarController.selectedIndex = TabbarVCs.home.rawValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...