У меня есть NavigationController
. В ThirdViewController
я выполняю некоторые задачи и при сбое, я показываю сообщения Alert, используя UIAlertController
.Не показывать предупреждение, если ViewController не находится в иерархии окон
Иногда, когда я запускаю задачу и возвращаюсь к SecondViewController
, я получаю сообщение об ошибке, отображаемое на SecondViewController
, и при нажатии «ОК» все становится черным ниже панели навигации. У меня осталась только панель навигации, и если я снова вернусь к FirstViewController
, у нее также будет тот же черный вид, кроме навигационной панели.
Представление оповещения ViewController, которая не находится в иерархии окон, создает проблему. Я не хочу, чтобы Alert был представлен, если меня нет на экране.
Это легко воспроизводится, если я вернусь, медленно поворачивая ViewController.
Каков наилучший способ справиться с этим?
Sharing мой код,
Кнопка действия в ThirdViewController
func buttonTapped() {
APIManager.sharedManager.getDetails(completion: { (details ,error) -> Void in
guard error == nil else {
Alert.errorMsg(error!.localizedDescription, viewController: self, goBack: false)
return
}
print(details)
}
}
class Alert: NSObject {
/* Error message */
class func errorMsg(message: String, viewController: UIViewController?, goBack: Bool = false) {
let alertView = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { (alert: UIAlertAction) -> Void in
if goBack == true && viewController != nil {
viewController!.navigationController?.popToRootViewControllerAnimated(true)
}
}
alertView.addAction(action)
let controller = viewController ?? UIApplication.sharedApplication().keyWindow?.rootViewController
controller!.presentViewController(alertView, animated: true, completion: nil)
}
}
написать свой код для получения более подробной информации – Lion