我无法找到一种方法来区分是从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/

10-12 12:35