2011-11-25 91 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英寸屏幕的视野范围。 要解决这个问题,只需更改标签的自动大小。

希望这会有所帮助。