Я пытаюсь вызвать небольшое всплывающее окно UIView
после того, как пользователь успешно войдет в систему, однако мне нужно, чтобы оно появилось на экране после закрытия LoginController
. Может ли кто-нибудь помочь понять, где я ошибаюсь? Возможно, необходимо вызвать его из rootViewController
после закрытия представления, но я не знаю, как его вызвать из LoginController
.
LoginController
закрывается правильно, а оператор печати регистрируется, поэтому я знаю, что блок завершения работает правильно, однако UIView
не остается поверх других представлений.
Должен ли я создать какой-то extension
, который позволит мне запускать его из другого класса? Мы будем очень благодарны за любые советы.
ЛогинКонтроллер()
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()
}
}
Похоже, что 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()
}
}
}
Пожалуйста, попробуйте добавить 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)
}
Большое спасибо. Работает отлично :)