Как проверить из контроллера или класса представления, виден ли конкретный контроллер представления на экране?Или как проверить видимый контроллер вида? - PullRequest
0 голосов
/ 09 октября 2018

В моем приложении у меня есть контроллер просмотра чата.Когда этот контроллер представлен (отображается на экране), я не хочу получать push-уведомления от 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 голосов
/ 09 октября 2018

Если у вас нет экземпляра этого контроллера представления, то вы можете создать переменную 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 {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...