1

Ich habe eine NavigationController. In der ThirdViewController Ich führe einige Aufgabe und bei Ausfall, zeige ich Warnmeldungen mit UIAlertController.Warnung nicht anzeigen, wenn sich der ViewController nicht in der Fensterhierarchie befindet

Manchmal, wenn ich die Aufgabe starte und zu SecondViewController zurückkomme, bekomme ich die Fehlermeldung auf SecondViewController angezeigt und wenn ich auf OK klicke, wird unter der Navigationsleiste alles schwarz. Ich habe nur noch die Navigationsleiste und wenn ich wieder zu FirstViewController gehe, hat es auch die gleiche schwarze Ansicht außer Navigationsleiste.

Präsentieren Die Warnung des ViewControllers, die nicht in der Fensterhierarchie enthalten ist, erzeugt das Problem. Ich möchte nicht, dass der Alarm angezeigt wird, wenn ich nicht auf dem Bildschirm bin.

Es ist leicht reproduzierbar, wenn ich zurück wische den ViewController langsam.

Was ist der beste Weg, damit umzugehen?

teilen meinen Code,

Button-Aktion in 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

poste deinen Code, um mehr Ideen zu bekommen – Lion

Antwort

3

habe ich eine CustomViewController und hat eine Eigenschaft 'isUnloading'. In viewWillDisappear setze ich isUnloading = true. Ich überprüfe die Eigenschaft, bevor ich die Warnung präsentiere.

0

Da Sie keinen Code nicht geteilt wir wissen nicht genau, was da passiert. Wenn Sie jedoch die Warnung nicht anzeigen möchten, wenn sich der Ansichtscontroller nicht in der Fensterhierarchie befindet, können Sie überprüfen, ob viewController.view.window festgelegt ist, bevor die Warnmeldungsansicht angezeigt wird, und sie nur anzeigen, wenn sie festgelegt ist.

0

Sie so etwas wie,

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

genannt Alarm als,

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

siehe this link für weitere Einzelheiten tun.

Hope this helfen :)

Verwandte Themen