У меня есть один сценарий, когда пользователь не использовал приложение более 5 минут. Приложение покажет всплывающее окно с сообщением об окончании сеанса.
Код окончания сеанса добавляется в appDelegate
и изтам будет отображаться всплывающее окно на текущем контроллере представления.
код:
@objc func applicationDidTimeout(notification: NSNotification) {
if (window?.rootViewController?.isKind(of: UITabBarController.self))! {
for view in window?.rootViewController?.view.subviews ?? [(window?.rootViewController?.view)!] {
if view.isKind(of: MBProgressHUD.self) {
return
}
}
if window?.rootViewController?.presentedViewController != nil {
window?.rootViewController?.dismiss(animated: true, completion: {
self.showMessage(message: Message.sessionTimeout)
})
} else {
self.showMessage(message: Message.sessionTimeout)
}
}
}
fileprivate func showMessage(message: String) {
let alert = UIAlertController(title: appName, message: message, preferredStyle: .alert)
let actionOkay = UIAlertAction(title: "OK", style: .default) { (action) in
DispatchQueue.main.async {
UIView.transition(with: self.window!, duration: 0.3, options: UIView.AnimationOptions.transitionCrossDissolve, animations: {
CommonFunctions.setLoginAsRootVC()
}, completion: nil)
}
}
alert.addAction(actionOkay)
self.window?.rootViewController?.present(alert, animated: true, completion: nil)
}
Теперь, если пользователь выполняет какой-либо ввод данных и в это время, если пользователь покидает приложение, идеально подходящее дляЧерез 5 или более минут клавиатура будет закрыта, и там появится сообщение об истечении сеанса.
Но поскольку метод делегата текстового поля textFieldShouldEndEditing
имеет некоторую проверку, и если эта проверка не пройдена, он отображает всплывающее окно с сообщением и кнопкой ОК.
Таким образом, когда пользователь нажимает кнопку «ОК» во всплывающем сообщении об окончании сеанса, он перенаправляет пользователя на экран входа в систему, но из-за проверки метода делегата текстового поля он отображается в окне входа в систему.screen.
Код для всплывающего сообщения об ошибке проверки:
fileprivate func showErrorMessage(message: String) {
let alert = UIAlertController(title: appName, message: message, preferredStyle: .alert)
let actionOkay = UIAlertAction(title: "OK", style: .default) { (action) in
self.txtField.becomeFirstResponder()
}
alert.addAction(actionOkay)
self.present(alert, animated: true, completion: nil)
}
Как предвидетьЕсли всплывающее окно присутствует на экране входа?