2

我想在创建 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()

..但它的工作原理!

欢迎改进!

4

2 回答 2

2

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

于 2014-09-18T13:47:43.337 回答
1

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

 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)
    }
}
于 2021-01-18T09:36:08.590 回答