我显示的是一个alertController,如果用户单击Yes,就会显示一个ProgressView,但是不幸的是ProgressView和标签没有出现。如何刷新ViewController。这里是为alertController的yes处理程序执行的cod。代码将毫无问题地执行,但progressview不会出现:
func initProgressView(){
turn = 0
let xCoord = self.view.center.x
let yCoord = self.view.center.y + 10
progressLabel = UILabel(frame: CGRect(x: xCoord, y: yCoord, width: 100, height: 23))
progressLabel.text = "0 %"
progressLabel.font = UIFont.boldSystemFontOfSize(14)
progressView.center = self.view.center
progressView.trackTintColor = UIColor.lightGrayColor()
progressView.tintColor = UIColor.blueColor()
// self.view.backgroundColor = UIColor.yellowColor()
self.view.addSubview(progressLabel)
self.view.addSubview(progressView)
}
下面是完整的调用序列:
initProgressView()//见上一篇文章
然后调用importData:
func importData (source : ImportDataInterface, data : NSData, progressStep : Int) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
source.importData(data)
dispatch_async(dispatch_get_main_queue(), {
self.counter += progressStep
return
})
})
}
最后在调用函数中:
progressView.removeFromSuperview()
progressLabel.removeFromSuperview()
我如何刷新ViewController或者其他什么可能是progressView没有出现的原因。可能是,约束或自动布局问题是问题所在。
谢谢
阿诺德
最佳答案
你没有提供足够的信息。你得给我们看看电话的顺序。
在代码返回之前,iOS不会将更改呈现到屏幕上。以下编码模式不起作用:
create progress indicator
add progress indicator to superview
start progress indicator spinning
do long-running task
stop progress indicator
相反,你要做的是这样的事情:
create progress indicator
add progress indicator to superview
start progress indicator spinning
invoke long-running task with a call to dispatch_after and a delay of 0:
dispatch_after(main queue, delay 0)
{
do long running task
stop activity indicator
}
调用dispatch_after将闭包排队,以便下次代码返回时在主线程上运行,并且调用事件循环,即使延迟值为0。
关于ios - 使用Swift无法在View Controller上显示ProgressView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34532038/