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秒 –