【问题标题】:How to detect if a pushed viewcontroller appears again?如何检测推送的视图控制器是否再次出现?
【发布时间】:2017-06-28 11:53:26
【问题描述】:
  • 假设我有一个推送 QRCodeScannerViewcontroller (vcB) 的视图控制器 (vcA)。当 (vcB) 扫描到东西时,它会推送 ResultviewController (vcC)

-这 3 个视图连接到 UInavigation 控制器

-用户点击(vcC)

上的后退按钮

我的问题是:

1)如果不更改 (vcB) 上的代码,我如何知道 (vcB) 是否可见? (vcB) 是一个 pod

2) 我将把这段代码放在哪里?我只能访问 (vcA)

我尝试在 (vcA) 上添加此代码,但没有任何反应

override func viewDidDisappear(_ animated: Bool) {

    if (vcB.isViewLoaded && (vcB.view.window != nil)){
        print("vcb did appear!")
    }

}

【问题讨论】:

  • 你不能在cvB和vcC里面写代码?
  • 我可以,但我不想改变 cvB,因为它是 pod。虽然我可以改变 vcC

标签: swift uiviewcontroller uinavigationcontroller


【解决方案1】:

要知道导航堆栈中是否存在 cvB 类的实例,您可以使用以下代码:

let result = self.navigationController?.viewControllers.filter({
    if let vcB = $0 as? UIViewController { // Replace UIViewController with your class, for example ViewControllerB
        return true
    }
    return false
})

if result.isEmpty {
    print("An instance of vcB's class hasn't been pused before")
} else {
    print("An instance of vcB's class has been pused before")
}

【讨论】:

  • 我的目标是知道 cvB 是否确实出现了。我将把这段代码放在哪里?
  • 把它放在你想检查的地方。你想在哪里检查?
  • 我可以把这个放在vcA上吗? on viewWilappear?
  • 是的,你可以这样做。但是尝试选择一个逻辑的地方进行这个检查,这取决于你的应用程序的逻辑。
  • 谢谢,我测试了一些东西后会接受这个作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多