我有NavigationController
。在ThirdViewController
我正在执行某项任务并且失败时,我使用UIAlertController
显示警报消息。
有时,当我开始执行任务并返回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)
}
}
答案 0 :(得分:3)
我创建了一个CustomViewController
并添加了一个属性' isUnloading
'。在viewWillDisappear
中,我设置了isUnloading = true
。我在出示警报之前检查了房产。
答案 1 :(得分:0)
由于您没有共享任何代码,我们不确切知道那里发生了什么。但是,如果您不希望在视图控制器不在窗口层次结构中时显示警报,则可以在显示警报视图之前检查是否设置了viewController.view.window
,并仅在设置时显示它。
答案 2 :(得分:0)
class AlertHelper {
func showAlert(fromController controller: UIViewController) {
var alert = UIAlertController(title: "abc", message: "def", preferredStyle: .Alert)
controller.presentViewController(alert, animated: true, completion: nil)
}
}
调用alert as,
var alert = AlertHelper()
alert.showAlert(fromController: self)
请参阅this link了解更多详情。
希望这会有所帮助:)