我在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
值或其他设置。有人可以帮忙吗?谢谢
答案 0 :(得分:-2)
您可以检查当前导航控制器的导航堆栈。
let viewControllers = self.navigationController!.viewControllers as [UIViewController]
for vc:UIViewController in viewControllers {
if vc.isKind(of: YourVC.self) {
}
}
答案 1 :(得分:-2)
使用用户默认设置没有任何意义,因为即使您的应用程序被终止,这些默认设置也将保持不变。这意味着如果用户正在聊天,请关闭该应用程序,然后再次打开它,您的用户默认值将显示该用户仍在聊天屏幕上。
有多种显示聊天屏幕的方法。它可能会显示,可能会在导航栏,选项卡栏内推送,甚至可能自定义添加到内容视图。所以我想说最好还是使用willAppear
和didDisappear
。静态值应该可以解决问题:
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
。