如何通过选择UITableViewCell在TabBarController中更改ViewController?

时间:2019-01-28 18:34:40

标签: ios swift uitableview uitabbarcontroller didselectrowatindexpath

我正在尝试通过在单元格上进行选择来过渡到其他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在另一个我称为“ searchViewController”的viewController中工作,用户可以在其中输入其位置和状态。

1 个答案:

答案 0 :(得分:2)

我认为问题出在这里

  

一旦用户通过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
}