Создать тост при выходе из системы (iOS) - PullRequest
0 голосов
/ 11 февраля 2019

Я работаю для приложения, в котором есть пользователи.Одна из функциональных возможностей - позволить пользователю выйти из системы и быть перенаправленным на первую страницу.Я столкнулся с проблемой, когда пользователь выходит из системы, в первом представлении приложения должно отображаться сообщение «Вы вышли из системы» и получение команды с другой страницы.По сути, это тостовое сообщение, которое может работать со всеми представлениями, а не только с текущим.

Мне удалось вызвать функцию тоста после выхода пользователя из системы, но оно не будет отображать сообщение, поскольку текущее представлениепрежде чем иметь возможность показать его.

Эта функция называется:

func showToast(controller: UIViewController, message : String, seconds: Double) {

    let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
    alert.view.backgroundColor = UIColor.black
    alert.view.alpha = 0.6
    alert.view.layer.cornerRadius = 15
    controller.present(alert, animated: true)

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
        alert.dismiss(animated: true)
    }
}

1 Ответ

0 голосов
/ 11 февраля 2019
  1. Если вы не знаете, какой текущий представленный VC вы можете использовать это расширение здесь:

    extension UIWindow {
    func topViewController() -> UIViewController? {
        var top = self.rootViewController
        while true {
            if let presented = top?.presentedViewController {
                top = presented
            } else if let nav = top as? UINavigationController {
                top = nav.visibleViewController
            } else if let tab = top as? UITabBarController {
                top = tab.selectedViewController
            } else {
                break
            }
        }
        return top
    }
    

    }

Тогда выможно назвать это так:

if let topVC = UIApplication.shared.keyWindow?.topViewController() {
    topVC.present(alert, animated: true)
}

Другой вариант заключается в том, что вы открываете / закрываете свой view-контроллер после того, как отключили свое предупреждение:

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
alert.dismiss(animated: true)
// popViewController or dismiss here
}
...