TabBarController 不会更改选定的索引
TabBarController doesn't change selected index
我正在尝试将选定的 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
}
}
我不确定您为什么要更改 viewcontroller viewdidload 中的 selectedIndex。因为它还会显示选定的索引视图控制器。
请将其更改为 viewWillAppear 或 viewDidAppear 而不是 viewDidLoad。
更新: 这将不起作用,因为您的代码是在 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 :( ")
}
}
希望这会有所帮助:)
我正在尝试将选定的 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
}
}
我不确定您为什么要更改 viewcontroller viewdidload 中的 selectedIndex。因为它还会显示选定的索引视图控制器。
请将其更改为 viewWillAppear 或 viewDidAppear 而不是 viewDidLoad。
更新: 这将不起作用,因为您的代码是在 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 :( ")
}
}
希望这会有所帮助:)