SWIFT - 如何在显示UIAlertController消息后更改它

时间:2014-09-18 13:38:21

标签: ios swift alert uialertcontroller

我想在创建后更改UIAlertController的消息。 在警报内,我想显示下载状态。

@IBAction func dbWillSync(sender: AnyObject) {
    alert = UIAlertController(title: "SYNC",
        message: "0%",
        preferredStyle: .Alert)

    let dismissHandler = {
        (action: UIAlertAction!) in
        self.dismissViewControllerAnimated(true, completion: nil)
    }

    alert.addAction(UIAlertAction(title: "STOP DOWNLOAD",
        style: .Cancel,
        handler: dismissHandler))

    presentViewController(alert, animated: true, completion: nil)

    download();
}

func download(){
    for i in 1...100{
        alert.message="\(i) %"
        sleep(1)
    }
}

有什么不对?

由于

* 编辑 *****

我不知道它是否是最好的解决方案:

let thread = NSThread(target:self, selector:"download", object:nil)
thread.start()

..但它有效!

欢迎改进!

2 个答案:

答案 0 :(得分:1)

在iOS中,图形操作不会实时发生。当您调用下载方法时,警报尚未显示在屏幕上。退出方法并返回系统主循环后,所有图形都会发生。因此,当您的下载方法运行时,甚至不会显示警报。您必须从下载本身更新警报消息。

答案 1 :(得分:0)

你可以使用这个代码它的作品!!**

 BG {
        self.UI {
            self.alertController.message = "update message"
        }
    }


.....


extension UIViewController {
func BG(_ block: @escaping ()->Void) {
        DispatchQueue.global(qos: .default).async(execute: block)
    }
    
    func UI(_ block: @escaping ()->Void) {
        DispatchQueue.main.async(execute: block)
    }
}