1

У меня есть 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) 
    } 
} 
+1

написать свой код для получения более подробной информации – Lion

ответ

3

Я создал CustomViewController и добавил свойство 'isUnloading'. В viewWillDisappear я установил isUnloading = true. Я проверяю свойство перед представлением предупреждения.

0

Поскольку вы не поделиться какой-либо код, который мы не знаем точно, что там происходит. Но если вы не хотите показывать предупреждение, если контроллер просмотра не находится в иерархии окон, вы можете проверить, установлен ли viewController.view.window, прежде чем показывать представление предупреждения и показывать его только в том случае, если он установлен.

0

вы можете сделать что-то подобное,

class AlertHelper { 
func showAlert(fromController controller: UIViewController) { 
    var alert = UIAlertController(title: "abc", message: "def", preferredStyle: .Alert) 
    controller.presentViewController(alert, animated: true, completion: nil) 
} 
} 

называется предупреждение, как,

var alert = AlertHelper() 
alert.showAlert(fromController: self) 

см this link более подробно.

Надеется, что это поможет :)