如何通过选择 UITableViewCell 更改 TabBarController 中的 ViewController?
How to change the ViewController within a TabBarController by selecting a UITableViewCell?
我正在尝试通过选择一个单元格来转换到另一个 UIViewController
(它是 UITabBarController
的一部分)。
我有一个 HistoryViewController
,其中包含此单元格和表格视图。一旦用户通过 LoginViewController
登录,这个历史视图控制器就是 "present modally current context"。不确定这对问题是否重要,但我认为值得一提。
这是层次结构:
-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",用户在其中输入他们的位置和状态。
我认为问题出在这里:
This History View Controller is "present modally current context" once a user logs in with through the 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
}
我正在尝试通过选择一个单元格来转换到另一个 UIViewController
(它是 UITabBarController
的一部分)。
我有一个 HistoryViewController
,其中包含此单元格和表格视图。一旦用户通过 LoginViewController
登录,这个历史视图控制器就是 "present modally current context"。不确定这对问题是否重要,但我认为值得一提。
这是层次结构:
-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",用户在其中输入他们的位置和状态。
我认为问题出在这里:
This History View Controller is "present modally current context" once a user logs in with through the 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
}