从另一个视图控制器更改选项卡栏选定项

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];