1

我有NavigationController。在ThirdViewController我正在執行一些任務,並在失敗時,我使用UIAlertController顯示警報消息。當ViewController不在窗口層次結構中時不顯示警報

有時,當我啓動任務並返回到SecondViewController時,出現SecondViewController上顯示的錯誤消息,單擊確定後,導航欄中的所有內容都變黑。我剩下的只有導航欄,如果我再次返回到FirstViewController,它除了導航欄外也具有相同的黑色視圖。

呈現不在窗口層次結構中的ViewController的警報會產生問題。如果我不在屏幕上,我不希望提示警報。

如果我慢慢地刷回ViewController,它很容易重現。

處理它的最好方法是什麼?

分享我的代碼,

按鈕動作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瞭解更多詳情。

希望這將有助於:)

相關問題