如何在Swift 3中检查Current ViewController?

时间:2018-10-08 06:06:50

标签: ios swift3 nsuserdefaults

我在ChatViewController上,我导航到其他页面,然后再次访问ChatViewController,所以当我访问同一页面时,如何在ChatViewController页面上检查即时消息。< / p>

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(true)

    UserDefaults.standard.value(forKey: "ChatView")

    print("view will appear called")
}


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    UserDefaults.standard.object(forKey: "ChatView")
    print("view will disappear called")
}

我是否需要设置任何UserDefaults值或其他设置。有人可以帮忙吗?谢谢

2 个答案:

答案 0 :(得分:-2)

您可以检查当前导航控制器的导航堆栈。

let viewControllers = self.navigationController!.viewControllers as [UIViewController]
for vc:UIViewController in viewControllers {
    if vc.isKind(of: YourVC.self) {
    }
}

答案 1 :(得分:-2)

使用用户默认设置没有任何意义,因为即使您的应用程序被终止,这些默认设置也将保持不变。这意味着如果用户正在聊天,请关闭该应用程序,然后再次打开它,您的用户默认值将显示该用户仍在聊天屏幕上。

有多种显示聊天屏幕的方法。它可能会显示,可能会在导航栏,选项卡栏内推送,甚至可能自定义添加到内容视图。所以我想说最好还是使用willAppeardidDisappear。静态值应该可以解决问题:

class ChatViewController: UIViewController {

    static private(set) var currentVisibleInstance: ChatViewController?

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        ChatViewController.currentVisibleInstance = self
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        ChatViewController.currentVisibleInstance = nil
    }

}

现在您可以在任何地方使用它了

let isChatVisible: Bool = ChatViewController.currentVisibleInstance != nil
let currentChatController: ChatViewController? = ChatViewController.currentVisibleInstance

如果您认为合适,可以自然地将此currentVisibleInstance放在其他课程中。您只需更改为SomeOtherClass.currentVisibleChatViewController = self