2015-06-19 109 views
1

我正在从服务器下载JSON数据的应用程序,然后将其显示在UIView上。该视图不会更新,只需要大约15秒。我已经过测试,以确保它不会延迟更新,并且如果我在添加数据时更改视图的背景颜色,它也会等待更新。我是否认为这是一种不更新的观点,还是其他的东西呢?我如何强制更新视图?谢谢。如何强制UIView更新

var newView = CustomView(product: products[0],descriptive: false) 
     contentView.addSubview(newView) 

     let backHeight = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Height, multiplier: 0.2, constant: 0) 
     let backWidth = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0) 

     let backXPosition = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Left, multiplier: 1, constant:0) 
     let backYPosition = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: colorLabel, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0) 
     view.addConstraints([backHeight,backWidth,backXPosition,backYPosition]) 

这是我如何将项目添加到视图。

+0

如何更新,是否在后台线程上发生了下载的返回块,以及是否正在从后台线程更新UI?所有UI更新必须位于主线程上。 – MDB983

+0

如何放置一些活动指标,直到获得所有数据,然后创建UI?你能告诉我们你到目前为止所尝试过的吗? –

+0

对不起,我忘了补充说,视图确实得到更新,在添加视图之后应该运行的println后,只需要10-15秒钟。 –

回答

1

当你得到如下图所示的代码从服务器可以更新UI进入视野与主队列中的数据:

dispatch_async(dispatch_get_main_queue()) { 
    //Update your UI here 

} 
3

你有,你要在视图中显示的数据的代码样本?

您可以触发一个视图通过调用

view.setNeedsDisplay() //Updates any drawing, including that in drawRect() 

view.setNeedsLayout() //Triggers layoutSubviews() 

更新,但我不认为这类原因也将有所帮助,如果你加入他们应该表现出新的观点没有打电话给那些人。除非你像Dharmesh建议的那样使用不同的线程。

确保您将视图添加到父级,并确保您在它们上设置了框架,就好像它们是标签一样,如果没有设置框架,它们可能不会出现。

+0

对不起,我不知何故忘了添加到原来的帖子,视图确实显示,只是在它们被添加后的println后10-15秒 –