2013-07-02 58 views
1

我想編寫一些代碼,以便在文本發生更改時更新UILabel文本。我寫一個小的演示,如:UILabel顯示不更新

- (IBAction)ButtonPressed:(id)sender { 
    for(int i = 0; i < 100000; ++i) 
    { 
     [self.Label setText:[NSString stringWithFormat:@"%d",i]]; 
     [self.Label setNeedsDisplay]; 
    } 
} 

當我按一下按鈕,標籤僅改變一次到99999,但我希望它顯示爲0 99999次,99999任何人有一個想法,爲什麼代碼不工作?

在此先感謝!

回答

3

setNeedsDisplay告訴系統您的視圖想要被繪製,但它不會強制它發生。該視圖將在下一個繪製循環中重繪,該循環在for循環完成後發生。如果您希望所有100,000次更改都可見,則必須將標籤更新延遲一段人爲感知的數量。

+0

這是正確的。 iOS中的繪圖不會實時發生。繪圖發生在你的方法完成後,你進入主循環。 –

+0

謝謝,這是完全正確的。我需要設置大約0.1秒的延遲時間,並且它可以很好地工作。 – user2480277

2

以上的答案是正確的,但要細說,如果你想更新明顯標籤的內容,你可以試試下面的

- (IBAction)ButtonPressed:(id)sender { 
    for(int i = 0; i < 100000; ++i) 
    { 
     double delayInSeconds = 0.01 * i; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *  NSEC_PER_SEC)); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [self.Label setText:[NSString stringWithFormat:@"%d",i]]; 
      [self.Label setNeedsDisplay]; 
     }); 
    } 
} 

你的目的,雖然,這可能是無關緊要的。更有觸覺的方法是將實例變量中的按鈕存儲多次,並在每次觸摸時增加它,並適當地設置標籤值。

+0

謝謝。我正在使用類似的東西,它的工作原理。 – user2480277