我有TabBarController5 個選項。第一個 TabBarItem 是 HomeScreen,第二個是帶我進入深度導航作業流程。當我在最后一個ViewController深度導航時,我有一個Save按鈕,當我單擊它時,我想將用戶發送回 HomeScreen。問題是我所有的圖示都TabBarController消失了。我嘗試了另一種解決方案,但是對于該解決方案,我的圖示正在顯示,但是當我單擊第二個時,我TabBarItem會看到該深度導航作業流程的最后一個螢屏。這是我的專案:https ://github.com/AdvancedNavigationTabBarController
這是我的代碼:
第一個標簽欄專案
class HomeVC: UIViewController {
@IBOutlet var textfieldHoldingScootersValue: UITextField!
@IBOutlet var textfieldHoldingBicyclesValue: UITextField!
var valueForScootersScreen = String()
var valueForBicyclesScreen = String()
override func viewDidAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("Selected index: \(self.tabBarController?.selectedIndex ?? -1)")
}
override func viewWillDisappear(_ animated: Bool) {
valueForScootersScreen = textfieldHoldingScootersValue.text ?? String()
valueForBicyclesScreen = textfieldHoldingBicyclesValue.text ?? String()
if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
if let scootersTab = navController.children.first as? BuyNewScooterOrBikeVC{
scootersTab.receivedValueFromHomeScreen = valueForScootersScreen
}
}
if let navController = self.tabBarController?.viewControllers?[2] as? UINavigationController{
if let bicyclesTab = navController.children.first as? BuyNewScooterOrBikeVC{
bicyclesTab.receivedValueFromHomeScreen = valueForBicyclesScreen
}
}
}
第二個標簽欄專案
class BuyNewScooterOrBikeVC: UIViewController {
@IBOutlet var receivedValueLabel: UILabel!
var receivedValueFromHomeScreen = String()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("Selected index: \(self.tabBarController?.selectedIndex ?? -1)")
if self.tabBarController?.selectedIndex == 1 {
receivedValueLabel.text = "Value received for Scooters: \n" receivedValueFromHomeScreen
self.navigationItem.title = "Buy a Scooter"
}
if self.tabBarController?.selectedIndex == 2 {
receivedValueLabel.text = "Value received for Bicycles: \n" receivedValueFromHomeScreen
self.navigationItem.title = "Buy a Bicycle"
}
}
}
第二個標簽欄專案的最后一個視圖控制器
class ScooterOrBikeLastVC: UIViewController {
@IBAction func saveBtnTapped(_ sender: UIButton) {
// Navigate to Home Screen
// self.parent?.navigationController?.popToRootViewController(animated: true) // if I use this line then when I click on the same Tab Bar is sending me to the last screen and I want to be on the first screen of that navigation workflow
self.navigationController?.popToRootViewController(animated: true) // If I use this line when I click Save btn I don't see anymore the icons on Tab Bar Controller
self.tabBarController?.selectedIndex = 0
}
}
感謝您閱讀本文!
uj5u.com熱心網友回復:
在彈出到 root 之前將 tabIndex 設定為 0。
self.tabBarController?.selectedIndex = 0
self.navigationController?.popToRootViewController(animated: true)
// class ScooterOrBikeLastVC // self.parent?.navigationController?.popToRootViewController(animated: true) // 這行什么都不做,因為父級是 nil 為什么你會得到 Home 選項卡?因為您已將標簽欄設定為 0 self.tabBarController?.selectedIndex = 0
當您希望撰寫生產代碼時,您應該考慮更好的方式在控制器之間進行通信。在您當前的方法中,任何控制器都可以訪問和修改另一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/410738.html
標籤:
