我想在创建后更改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()
..但它有效!
欢迎改进!
答案 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)
}
}