[英]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 :( ")
}
}
希望這會有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.