2015-12-30 33 views
1

我显示了一个alertController,如果用户单击是,应显示一个ProgressView,但不幸的是Progressview和标签不会显示。我怎样才能刷新我的ViewController。这里是为alertController的yes处理程序执行的cod。该代码将毫无问题地执行,但progressview没有出现:使用Swift在View Controller上不显示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没有出现的原因。是否可以,约束或自动布局问题是问题。

感谢 阿诺德

+0

progressView框架是什么? –

+0

是一个uiprogressView –

回答

0

您还没有提供足够的信息。你需要向我们展示呼叫的顺序。

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,您的代码仍会返回并返回事件循环

+0

这里的调用序列: –

+0

我的所有代码都在alert的yes处理程序中执行。我如何返回到主ViewController然后执行代码。所以也许存在这个问题。我的意思是我想在用户点击是时从文件读取数据。这些调用是:1)initprogressview 2)dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0),3)读取数据部分4)dispatch_async(dispatch_get_main_queue(),5)更新progressview。谢谢阿诺德 –

+0

现在我本地化的问题。这是因为我正在调用yes处理程序中的所有方法。当我只调用方法initProgressView()时,它向我展示progressview。但是,如何显示progressview,然后返回到调用的ViewController并执行其余的代码。谢谢阿诺德 –

0

看起来像progressView重叠progressLabel,也许你需要改变过去的2个字符串命令?

self.view.addSubview(progressView) 
self.view.addSubview(progressLabel) 
相关问题