在我的应用中,我有一个聊天视图控制器。当显示此控制器时(在屏幕上可见),我不想从firebase接收推送通知。否则,是的。 我在一个单独的类中处理通知,在该类中我想做类似的事情,但是我无权访问该变量,也无权访问该聊天控制器的实例:
If !ChatViewController.isOnScreen {
sendPushNotification()
}
A创建了扩展名,但是我不知道为什么不能使用它。就是这样:
extension UIViewController {
public var isOnScreen: Bool {
if isViewLoaded {
return view.window != nil
}
return false
}
public var isTopViewController: Bool {
if self.navigationController != nil {
return self.navigationController?.visibleViewController === self
} else if self.tabBarController != nil {
return self.tabBarController?.selectedViewController == self && self.presentedViewController == nil
} else {
return self.presentedViewController == nil && self.isOnScreen
}
}
}
我该怎么做?预先感谢。
答案 0 :(得分:2)
如果没有该视图控制器的实例,则可以在视图控制器中创建一个statice变量,并在该控制器可见时将其设置为true,在不可见时将其设置为false。
这是一些示例代码。在您的ChatViewController
public static var isOnScreen = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
isOnScreen = true
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
isOnScreen = false
}
现在您可以随时检查此变量,以了解控制器是否可见。
if ChatViewController.isOnScreen {
}