【问题标题】:Find out if a UIViewController appeared due to back navigation找出 UIViewController 是否由于后退导航而出现
【发布时间】:2016-07-29 06:06:05
【问题描述】:

我有一个 iOS 视图控制器,它既可以从 SourceViewController 中显示,也可以通过单击导航栏上的“

我如何确定 ViewController 是否是由于用户点击/触摸导航栏上的 " < Back " 而出现的。

【问题讨论】:

  • 没有正确回答您的问题!
  • 你应该在 viewDidAppear 上写一个方法来检查当前 UIVIewController 是否是 navigationController 的 viewControllers 属性中的最后一个控制器
  • @MohsenShakiba 这是个好主意,但您仍然需要考虑视图控制器的初始显示。
  • @Losiowaty 我以为他只是想知道控制器是否是返回导航的结果,你说的初始显示...是什么意思?
  • 当这个视图控制器首次显示时,它不会从导航回到它,如问题中所述(以及逻辑指示)。因此,当它首次显示给用户时,检查它是否是导航堆栈上的最后一个视图控制器也是正确的。这可能需要也可能不需要。

标签: ios swift uiviewcontroller segue


【解决方案1】:

viewDidLoad 在返回时不会被调用,因此您可以在那里设置某种标志并将其重置在适当的位置(可能是viewDidAppear?)。至于每次从SourceViewController 打开它时是否会调用viewDidLoad 取决于您的代码 - 如果您每次都创建一个新实例,您应该没问题。

举个例子:

class SampleViewController : UIViewController {
    var isOpenedFromBackNavigation = false

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        if self.isOpenedFromBackNavigation {
            // code that should be run if we navigated back here
        }
        self.isOpenedFromBackNavigation = true
    }
}

【讨论】:

  • 我认为viewDidAppear 也会在viewDidLoad 之后调用第一次加载,对吗? stackoverflow.com/questions/11254697/…
  • 是的,这就是我们使用标志来指示视图控制器是否已经显示的原因。
猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多