首页 > 解决方案 > 在 UIAlertController 中点击“确定”操作时如何关闭呈现视图控制器

问题描述

我试图在 UIAlertAction 的完成处理程序中关闭当前视图控制器,但它没有关闭。我编写了以下代码(加载指示器只是一个加载警报控制器,当数据成功上传时我将其关闭):

loadingIndicator.dismiss(animated: true) {                           
      let success = UIAlertController(title: "Successfully Uploaded", message: "", preferredStyle: .alert)
      let ok = UIAlertAction(title: "Ok", style: .default, handler: { _ in
               print("Ok selected") //this is working correctly
               self.dismiss(animated: true, completion: nil) //this is not
      })
                      
      success.addAction(ok)
      self.present(success, animated: true, completion: nil)
}

但是,在警报中单击“Ok”后,会打印“Ok selected”,但不会关闭视图控制器。调试器中没有其他任何显示。

标签: iosswiftuialertcontrollerdismissuialertaction

解决方案


尝试在主线程上关闭它,并检查 ViewController 是否在导航层次结构中呈现或推送。

loadingIndicator.dismiss(animated: true) {
    let success = UIAlertController(title: "Successfully Uploaded", message: "", preferredStyle: .alert)
    let ok = UIAlertAction(title: "Ok", style: .default, handler: { _ in
        DispatchQueue.main.async {
            self.dismiss(animated: true, completion: nil)
             // If pushed use PopViewController on navigation
             // self.navigationController?.popViewController(animated: true)
        }
    })
    success.addAction(ok)
    self.present(success, animated: true, completion: nil)
}

检查是否显示 ViewController 或不使用self.isBeingPresented属性。


推荐阅读