我显示的是一个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/

10-09 21:26