2011-11-25 89 views
5

我在我的.storyboard文件中創建了一個具有一些初始文本「電影標題」的UILabel。我已將該UILabel連接到在ViewController文件中定義的屬性。出於某種原因,當我運行模擬器時,文本將不會顯示在UI中。我看過類似的問題,但我沒有看到任何有幫助的迴應。UILabel文本沒有顯示,但「文本」值正在更新(在控制檯中顯示)

我在我的.h文件中的下列財產

@property (strong, nonatomic) IBOutlet UILabel * movieTitle; 

它在我的.m文件合成

@synthesize movieTitle; 

然後我有一些代碼,執行以下操作:

NSLog(@"movie details title in Movie object: %@", _movie.name); 
self.movieTitle = [[UILabel alloc] init]; 
[self.movieTitle setText:self.movie.name]; 
NSLog(@"movie details title in UILabel.text: %@",self.movieTitle.text); 

控制檯輸出以下內容

movie details title in Movie object: Transformers 
movie details title in UILabel.text: Transformers 

回答

3

如果movieTitle連接到Interface Builder的UILabel;,那麼你不應該創建另一個實例:

self.movieTitle = [[UILabel alloc] init]; 

您正在設置UILabel不是一個在GUI中的文本。

只要刪除該行,見下圖:

NSLog(@"movie details title in Movie object: %@", _movie.name); 
[self.movieTitle setText:self.movie.name]; 
NSLog(@"movie details title in UILabel.text: %@",self.movieTitle.text); 
6

確保您在主線程設置text財產。如果您不這樣做,它會更新該值,但不會重新繪製標籤。所有UIKit元素只能在主線程上更新。

如果您沒有連接到Interface Builder中的IBOutlet,則只需要創建第二個UILabel

+0

我遇到過類似問題的完美答案。我在後臺隊列中設置文本。 –

+0

我在構造函數中設置了值,UI沒有更新。你的解決方案解決了它,但我想知道爲什麼沒有任何警告或控制檯中的任何內容...... – VSG24

2

此答案可能不是您的情況,但您可能會覺得它有幫助。

在我的情況下,我在登錄視圖控制器的底部放置了一個標籤,以顯示我的應用程序的版本。當我運行測試應用程序時,標籤不會出現。 問題是因爲儘管登錄.xib文件是針對Retina 4全屏的,但部署目標(在應用摘要中)是5.0,所以當應用程序運行時(在模擬器上),它實際上運行的是iPhone 5.0模擬器, 3.5英寸的屏幕,並且由於標籤位於視圖的底部,因此它是3.5英寸屏幕的視野範圍。 要解決這個問題,只需更改標籤的自動大小。

希望這會有所幫助。