如何从视图控制器或 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 {
}