如何从视图控制器或类检查特定的视图控制器在屏幕上是否可见?或如何检查可见的视图控制器?

时间:2018-10-09 08:11:35

标签: ios swift xcode apple-push-notifications

在我的应用中,我有一个聊天视图控制器。当显示此控制器时(在屏幕上可见),我不想从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
        }
    }
}

我该怎么做?预先感谢。

1 个答案:

答案 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 {
}