我无法找到一种方法来区分从 Nav Controller 堆栈弹出和从 UITabBarController 进入 View Controller 。
我只想在 View 从 TabBar 显示时调用 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 按钮或按下返回按钮时没有区别。
只有“View Will Appear”被调用。
使用 iOS 8.4/Swift
最佳答案
UITabBarControllerDelegate
听起来不错.
首先,在您的 ViewController comingFromTab
上添加一个 Bool
属性:
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.viewDidAppear(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/