如何在Swift中取消没有按钮或交互的UIAlert?

如何在Swift中取消没有按钮或交互的UIAlert?,swift,uikit,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().dataTas


当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()
发送加载函数:

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

谢谢

将您的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()
发送加载函数:

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

}

将您的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()
发送加载函数:

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

}UIAlertController具有功能
解除ViewControllerAnimated(标志:Bool,完成:(()->Void)?)
根据苹果:

取消由视图控制器以模式显示的视图控制器

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

// 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()

我希望这对您有所帮助。

UIAlertController具有功能
解除ViewControlleranimated(标志:Bool,完成:(()->Void)?
根据苹果:

取消由视图控制器以模式显示的视图控制器

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

// 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()

我希望这对你有帮助。

这有帮助吗:?查找活动指示器Swift。这似乎是一种非常不和谐、非直观的方式来显示数据库活动(这可能是应用程序生命周期中经常出现的情况)。警报意味着需要用户立即采取行动或给予关注。@lukeslvi的替代方案看起来很有希望。这有帮助吗:?查找活动指示器Swift。这似乎是一种非常不和谐、非直观的方式来显示数据库活动(这可能是应用程序生命周期中经常出现的情况)。警报意味着需要用户立即采取行动或给予关注。@lukeslvi的替代方案看起来很有希望。