我正在尝试将选定的tabBarItem(和Controller)从索引1更改为索引0.
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
if UserDefaults.standard.double(forKey: "is_logged") != 1 {
// print always selectedIndex= Optional(0)
print("selectedIndex= \(self.tabBarController?.selectedIndex)")
self.tabBarController?.selectedIndex = 0
}
}
答案 0 :(得分:1)
我不确定您为什么要在viewcontroller viewdidload中更改selectedIndex。因为它还会显示选定的索引视图控制器。
请在viewWillAppear或viewDidAppear中更改viewDidLoad。
答案 1 :(得分:1)
更新:这不起作用,因为您的代码是在tabbarController的第二个(1索引)控制器中编写的。 UITabBarController仅在启动时加载第一个(0索引)控制器。
最好的方法是在UITabBarController中控制这个UITabBarController的创建子类,并在它的viewWillAppear中执行这样的操作。
/* viewWillAppear of TabBarController */
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
/* Check if user logged in */
if UserDefaults.standard.double(forKey: "is_logged") != 1 {
// Select first index
self.selectedIndex = 0
} else {
/* User not logged in */
// Select second index
self.selectedIndex = 1
}
//Current selected index
print("selectedIndex = \(String(describing: self.selectedIndex))")
}
如果你想在viewController中执行此操作,那么在第一个控制器的viewWillAppear中执行如下所示的操作
代码已更新
/* viewWillAppear of FirstViewController */
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// check tabBarController is not nil
if self.tabBarController != nil {
/* Check if user logged in */
if UserDefaults.standard.double(forKey: "is_logged") != 1 {
// Select first index
self.tabBarController?.selectedIndex = 0
} else {
/* User not logged in */
// Select second index
self.tabBarController?.selectedIndex = 1
}
//Current selected index
print("selectedIndex = \(String(describing: self.tabBarController?.selectedIndex))")
} else {
print("tabBarController is nil :( ")
}
}
希望这会有所帮助:)