Я пытаюсь вызвать небольшое временное всплывающее окно UIView после успешного входа пользователя в систему, однако мне нужно, чтобы оно появилось на экране после закрытия LoginController. Может кто-нибудь помочь понять, где я иду не так? Возможно, необходимо вызвать его из rootViewController после закрытия представления, но я не знаю, как вызвать его из LoginController.

LoginController правильно закрывается, а оператор print записывается в журнал, поэтому я знаю, что блок завершения работает правильно, однако UIView не стоит поверх других представлений.

Должен ли я создать какой-то extension, который позволит мне вызывать его из другого класса? Любые советы будут с благодарностью.

LoginController ( )

DispatchQueue.main.async {

    self.view.window?.rootViewController?.dismiss(animated: true, completion: {
                // completion handler after successful login
                print("completion handler: logged in")
                self.showAlert()
                })
    }

Пользовательские функции оповещения / всплывающих окон

func showAlert()    {
    popupAlert = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 200))
    popupAlert?.backgroundColor = .red
    self.view.addSubview(popupAlert)

    Timer.scheduledTimer(timeInterval: 4.0, target: self, selector: #selector(dismissAlert), userInfo: nil, repeats: false)
}

@objc func dismissAlert()   {
    if popupAlert != nil {
        popupAlert.removeFromSuperview()
    }
}
0
unicorn_surprise 29 Май 2019 в 15:49

2 ответа

Лучший ответ

Похоже, что root vc является логином 1, поэтому ваш код внутри завершения не срабатывает, поэтому добавьте его в окно

extension UIViewController { 
    func showAlert() {
        let popupAlert = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 200))
        popupAlert.backgroundColor = .red
        let wind = (UIApplication.shared.delegate as! AppDelegate).window!
        wind.addSubview(popupAlert) 
        Timer.scheduledTimer(withTimeInterval: 4.0, repeats: false) { (t) in
            t.invalidate() 
            popupAlert.removeFromSuperview()
        }
    }
}
2
Sh_Khan 29 Май 2019 в 12:57

Пожалуйста, попробуйте добавить popupAlert в окно приложения вместо self.view

 func showAlert()    {
    popupAlert = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 200))
    popupAlert?.backgroundColor = .red
    let app = UIApplication.shared.delegate as! AppDelegate
    app.window?.addSubview(popupAlert)

    Timer.scheduledTimer(timeInterval: 4.0, target: self, selector: #selector(dismissAlert), userInfo: nil, repeats: false)
}
0
priyaranjan 29 Май 2019 в 13:19