如何从视图控制器或 class 检查特定视图控制器是否在屏幕上可见?或者我如何检查可见视图控制器?
How do I check from a view controller or class if a specific view controller is visible on screen? Or how do I check visible view controller?
在我的应用程序中,我有一个聊天视图控制器。当这个控制器出现时(在屏幕上可见)我不想从 firebase 接收推送通知。否则是的。
我在一个单独的 class 中处理通知,我想在其中执行类似的操作,但是 我无法访问该变量,也无法访问该聊天控制器的实例 :
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
}
}
}
我该怎么做?提前致谢。
如果您没有该视图控制器的实例,您可以做的是在视图控制器中创建一个静态变量,并在控制器可见时将其设置为 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 {
}
在我的应用程序中,我有一个聊天视图控制器。当这个控制器出现时(在屏幕上可见)我不想从 firebase 接收推送通知。否则是的。 我在一个单独的 class 中处理通知,我想在其中执行类似的操作,但是 我无法访问该变量,也无法访问该聊天控制器的实例 :
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
}
}
}
我该怎么做?提前致谢。
如果您没有该视图控制器的实例,您可以做的是在视图控制器中创建一个静态变量,并在控制器可见时将其设置为 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 {
}