我无法找到区分从Nav控制器堆栈弹出和从UITabBarController进入视图控制器的方法 .
我想在ViewWillAppear中调用一个方法,只有当视图从TabBar中显示时,而不是当有人按下导航控制器时 .
如果我没有使用TabBarController,我可以使用viewDidLoad轻松实现此功能 .
我试过了,
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
println("View Will Appear")
if isBeingPresented() {
println("BP")
}
if isMovingFromParentViewController() {
println("from")
}
if isMovingToParentViewController() {
println("to")
}
}
但是当我按Tab键按钮或按下后退按钮时,没有任何区别 .
只有“View Will Appear”才会被调用 .
使用iOS 8.4 / Swift
3 回答
听起来很好用UITabBarControllerDelegate .
首先,在ViewController
comingFromTab
上添加Bool
属性:将
UITabBarControllerDelegate
设置为您想要的任何类,并实现方法shouldSelectViewController
. 您可能还想要将UITabBarController子类化并将它们放在那里 .如果选项卡的初始视图控制器是
UINavigationController
,则必须打开它并访问它的第一个视图控制器:最后,在视图控制器中添加
viewWillAppear
中所需的任何功能:没有办法确切知道 . 所以我想最简单的方法是添加一些你必须更改的变量,然后再回到那个视图控制器并在viewWillAppear中检查它的状态 .
您还可以尝试实现
UINavigationControllerDelegate
的- navigationController:willShowViewController:animated:
方法,并检查从标签栏显示视图控制器时是否会调用它 .你可以查看
parentViewController
属性