【发布时间】:2017-08-22 02:30:04
【问题描述】:
我有一个很好用的 UINavigationController。每个视图控制器都有自己的按钮,可以将堆栈弹出回其根目录,这也很有效。但是,我还希望能够通过按下选项卡栏上的按钮将堆栈弹出回其根目录(这显然是在导航堆栈之外的一个完全不同的类中)。
因此,我在选项卡栏类中创建了一个委托,它在堆栈顶部找到视图控制器并调用该视图控制器中的方法将堆栈弹出回根。我在控制台上打印了一些东西,以验证委托设置是否正确。一切都按原样工作,只是按下标签栏不会将堆栈弹回其根目录。
想法?
这是 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...其中一个选项卡包含一个 NavigationController...当您点击第三个选项卡时,您希望 NavController(如果它是当前选项卡?)弹出到它的根目录,你想显示第三个标签...听起来对吗?
标签: ios swift uinavigationcontroller delegates