Как изменить ViewController внутри TabBarController, выбрав UITableViewCell? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь перейти к другому UIViewController (который является частью UITabBarController), выбрав ячейку.

У меня есть HistoryViewController, где содержатся эта ячейка и табличное представление.Этот контроллер представления истории «представляет текущий модальный контекст», когда пользователь входит в систему через LoginViewController.Не уверен, имеет ли это значение для проблемы или нет, но я подумал, что стоит упомянуть.

Вот иерархия:

- LoginViewController -> HistoryViewController (это гдекод, указанный ниже:

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

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    LocationInformation.city = locations[indexPath.row].city
    LocationInformation.state = locations[indexPath.row].state

    self.tabBarController?.selectedIndex = 1
}

Цель состоит в том, чтобы установить город и штат местоположенияв глобальные переменные «LocationInformation» (которая работает), а затем измените на ViewController, который не работает.

Код self.tabBarController?.selectedIndex = 1 работает в другом viewController, который я назвал «searchViewController», где пользовательвводит их местоположение и состояние.

1 Ответ

0 голосов
/ 29 января 2019

Я думаю, что проблема здесь:

Этот контроллер представления истории «представляет текущий модальный контекст», как только пользователь входит в систему с помощью LoginViewController.

КогдаВы представили свой контроллер модально, тогда новый стек не имеет tabBarController.Вы можете проверить это путем отладки значения self.tabBarController, я думаю, оно будет nil

Решение

Если TabBarController является корневым контроллером представления, используйте это:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    LocationInformation.city = locations[indexPath.row].city
    LocationInformation.state = locations[indexPath.row].state

    let rootViewController = UIApplication.shared.keyWindow!.rootViewController
    (rootViewController as? UITabBarController)?.selectedIndex = 1
}
...