我有一個很好的UINavigationController。每個視圖控制器都有自己的按鈕,可以將堆棧彈回到其根目錄,這也非常棒。不過,我也想通過按下標籤欄上的按鈕(顯然是在導航堆棧外的完全不同的類中)將堆棧彈回到其根目錄。UINavigationController popToRootViewController方法不能由委託調用嗎?
因此,我在標籤欄類中創建了一個委託,該委託在堆棧頂部找到視圖控制器,並調用該視圖控制器中的方法將堆棧彈回到根目錄。我向控制檯打印了一些內容,以驗證委託設置是否正確。一切正常,因爲它應該,除了按下標籤欄不會彈出回到其根。
想法?
這是在一個UINavigationController堆
class BlankViewController202: UIViewController, MainContainerViewControllerDelegate {
// pop to root
func popToRoot() {
self.navigationController?.popToRootViewController(animated: true)
print("success")
}
}
的頂視圖控制器當此功能上面從該視圖控制器中調用(當用戶按下視圖控制器本身上的按鈕),它彈出堆棧。但是當這個相同的確切方法被標籤欄中的委託調用時,它不會彈出堆棧(但它會打印到控制檯,所以我知道它正確地連接起來)。
這是其中按鈕位於標籤欄的是,當按下應該彈出棧返回到其根
protocol MainContainerViewControllerDelegate {
func popToRoot()
}
class MainContainerViewController: UIViewController {
func moveToTab3(sender: UIButton!) {
// ...
let banana = BlankViewController202()
self.delegate = banana
delegate?.popToRoot()
}
}
因此......你有一個TabBarController ......其中一個Tabs包含一個NavigationController ......當你點擊第三個Tab時,你想讓NavController(如果它是當前選項卡?)彈出到其根目錄,並且你想要顯示第三個標籤......這聽起來是對的嗎? – DonMag