从另一个视图控制器更改选项卡栏选定项
Change tabbar selected item from another view controller
我是 Swift 的新手(使用 4 版本),我想从另一个视图控制器(不是标签栏控制器)更改标签栏项目。
这是我的方案:
我在 didSelectRowAt 中从 RouterViewController(用于侧边菜单导航)这样做:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let mainViewController = sideMenuController!
let tabBarController : TabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedIndex = indexPath.row
}
它不会引发任何异常和调试显示,让 tabBarController 不为空,但由于某种原因它不会更改选项卡。
我做错了什么?
您可以在 appDelegate 中定义此变量:
var window: UIWindow?
let tabViewController = self.window!.rootViewController as! UITabBarController
现在您可以在所有代码中使用 tabViewController 变量并调用其上的方法,例如更改页面的方法。
对于 UITableViewController 的所有 methods/variables,请参阅此处的文档 link:
https://developer.apple.com/documentation/uikit/uitabbarcontroller
我认为更改变量 "var selectedIndex: Int" 可以解决您的问题。
试试这个:
self.tabBarController.selectedIndex = 1;
self.tabBarController setSelectedIndex:1];
或
self.tabBarController.selectedViewController = yourViewController;
self.tabBarController setSelectedViewController:yourViewController];
我是 Swift 的新手(使用 4 版本),我想从另一个视图控制器(不是标签栏控制器)更改标签栏项目。
这是我的方案:
我在 didSelectRowAt 中从 RouterViewController(用于侧边菜单导航)这样做:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let mainViewController = sideMenuController!
let tabBarController : TabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedIndex = indexPath.row
}
它不会引发任何异常和调试显示,让 tabBarController 不为空,但由于某种原因它不会更改选项卡。
我做错了什么?
您可以在 appDelegate 中定义此变量:
var window: UIWindow?
let tabViewController = self.window!.rootViewController as! UITabBarController
现在您可以在所有代码中使用 tabViewController 变量并调用其上的方法,例如更改页面的方法。 对于 UITableViewController 的所有 methods/variables,请参阅此处的文档 link:
https://developer.apple.com/documentation/uikit/uitabbarcontroller
我认为更改变量 "var selectedIndex: Int" 可以解决您的问题。
试试这个:
self.tabBarController.selectedIndex = 1;
self.tabBarController setSelectedIndex:1];
或
self.tabBarController.selectedViewController = yourViewController;
self.tabBarController setSelectedViewController:yourViewController];