如何在Swift中没有按钮或交互的情况下解雇UIAlert?

时间:2016-01-11 19:00:36

标签: swift uikit


当我的iOS应用程序与数据库交互时,我正在使用UIAlert显示字符串“Loading ...”。有什么方法可以在行动完成后务实地解雇它吗? 代码:

let myUrl = NSURL(string: "http://www.test.org/ios.html")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        if error != nil {
             print("Error: \(error)")
        } 
        dispatch_async(dispatch_get_main_queue()) {
            self.testLabel.text = "\(responseString!)"
            // dismiss sendLoading() UIAlert
        }
    }
}
task.resume() 
self.sendLoading()

sendLoading func:

func sendLoading() {
    let alertController = UIAlertController(title: "Loading...", message:
            "", preferredStyle: UIAlertControllerStyle.Alert)
    self.presentViewController(alertController, animated: true, completion: nil)
}

谢谢

2 个答案:

答案 0 :(得分:0)

将您的alertController作为实例变量,当您需要解除它时,只需调用

self.dismissViewController(alertController, animated:true, completion: nil)

编辑 - 添加代码。 在你的情况下代码就像 -

  let alertController : UIAlertController ?
  let myUrl = NSURL(string: "http://www.test.org/ios.html")
  let request = NSMutableURLRequest(URL: myUrl!)
  request.HTTPMethod = "POST"
  let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
    if error != nil {
         print("Error: \(error)")
    } 
    dispatch_async(dispatch_get_main_queue()) {
        self.testLabel.text = "\(responseString!)"
        // dismiss sendLoading() UIAlert
      self.dismissViewController(alertController!, animated:true, completion: nil)
    }
}
}
task.resume() 
self.sendLoading()

sendLoading func:

func sendLoading() {
alertController = UIAlertController(title: "Loading...", message:
        "", preferredStyle: UIAlertControllerStyle.Alert)
self.presentViewController(alertController, animated: true, completion: nil)

}

答案 1 :(得分:0)

根据Apple,UIAlertController具有dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?)功能:

  

取消视图控制器以模态方式显示的视图控制器。

然后您需要做的是在UIAlertController中保留UIViewController作为属性的引用,然后根据需要将其删除,如下所示:

// instance of the UIAlertController to dismiss later 
var alertController: UIAlertController!

func sendLoading() {
    self.alertController = UIAlertController(title: "Loading...", message:
        "", preferredStyle: UIAlertControllerStyle.Alert)
    self.presentViewController(alertController, animated: true, completion: nil)
}

let myUrl = NSURL(string: "http://www.test.org/ios.html")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
   data, response, error in
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
       let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
       if error != nil {
            print("Error: \(error)")
       } 
       dispatch_async(dispatch_get_main_queue()) {
           self.testLabel.text = "\(responseString!)"
           // dismiss sendLoading() UIAlert
           self.alertController.dismissViewControllerAnimated(true, completion: nil)
       }
   }
}
task.resume() 
self.sendLoading()

我希望这对你有所帮助。