我无法找到一种方法来区分是从Nav Controller 堆栈弹出还是从UITabBarController进入 View Controller 。
我只想在从TabBar呈现 View 时才调用ViewWillAppear中的方法,而不是在有人向后按导航 Controller 时调用该方法。
如果我不使用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键或按Back键没有什么区别。
仅调用“将显示 View ”。
使用iOS 8.4/Swift
最佳答案
听起来像是 UITabBarControllerDelegate
的好用法。
首先,在您的ViewController Bool
上添加一个comingFromTab
属性:
class MyViewController: UIViewController {
var comingFromTab = false
// ...
}
将
UITabBarControllerDelegate
设置为所需的任何类,并实现shouldSelectViewController
方法。您可能还想继承UITabBarController的子类,然后将它们放在那里。func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
if let myViewController = viewController as? MyViewController {
myViewController.comingFromTab = true
}
如果选项卡的初始 View Controller 是
UINavigationController
,则必须解开该包装并访问它的第一个 View Controller :if let navController = viewController as? UINavigationController {
if let myViewController = navController.viewControllers[0] as? MyViewController {
// do stuff
}
}
最后,在 View Controller 的
viewWillAppear
中添加所需的任何功能:override func viewDidAppear(animated: Bool) {
super.viewWillAppear(animated)
// ...
if comingFromTab {
// Do whatever you need to do here if coming from the tab selection
comingFromTab = false
}
}
关于ios - 从弹出的UINavigationController或UITabBarController确定viewWillAppear,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31507937/