ios - 从弹出的 UINavigationController 或 UITabBarController 确定 viewWillAppear

标签 ios swift uinavigationcontroller uitabbarcontroller viewwillappear

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

相关文章:

iphone - 在一个App中使用两个库访问iPhone相机

ios - 无法为自定义 UIButton 添加 NSLayoutContraints

ios - 导航栏按钮图片

ios - 隐藏导航栏的 View 中的交互式弹出手势?

iPhone 开发 : How to build a custom view hierarchy?

ios - 应用程序中的状态栏消失了(Xcode iphone)

iphone - 扭曲 UIView 的一部分

ios - 使用 OCR 识别 double 或 S 中的数字 5

ios - 如何在 swift 中转换持续时间形式的 youtube api?

Swift IBoutlet 默认值