2013-01-16 112 views
0

我被困在一个简单的任务,我有我的uiviewcontroller的接口文件uilabel。我想通过一些方法更新该标签。它不更新标签。UILabel没有更新它的文本,IOS

enter image description here

.h 
UIViewController 
{ 
    UILabel *pictureNameLabel; 
} 
@property (nonatomic, strong) IBOutlet UILabel *pictureNameLabel; 

.m 
@synthesize pictureNameLabel=_pictureNameLabel; 
- (void)viewDidLoad 
{ 
     _pictureNameLabel = [[UILabel alloc] init]; 
     _pictureNameLabel.textColor=[UIColor blackColor]; 
     [email protected]"Try"; 
} 

我该如何解决这个问题?

回答

3

您不需要分配标签。它已经活着,从笔尖醒来。

.h 
UIViewController 
{ 
    //UILabel *pictureNameLabel; 
} 
@property (nonatomic, strong) IBOutlet UILabel *pictureNameLabel; 

.m 
@synthesize pictureNameLabel=_pictureNameLabel; 
- (void)viewDidLoad 
{ 
     //_pictureNameLabel = [[UILabel alloc] init]; 
     _pictureNameLabel.textColor=[UIColor blackColor]; 
     [email protected]"Try"; 
} 
+2

你不仅需要它,而且实际上是指向一个实际上不在屏幕上的新标签(与分配不同,这只是浪费内存,而是将指针重新分配给标签),然后更新那。你打破了与你的出路的连接。 –

+0

@DavidRönnqvist我以同样的方式分配UIWebview,它的工作原理他们之间有什么区别,我怎么能确定一个UI元素需要分配? –

+1

您只在未将UI元素添加到笔尖时才分配UI元素,并且您希望以编程方式将它们加载到视图中。 – estobbart

-1

您的标签已经存在于您的xib文件中,并且您可以在界面bulider上设置textcolor,text。

+0

我知道我想用各种动作更新标签的文字 –

2

你的直接问题是线路:

_pictureNameLabel = [[UILabel alloc] init]; 

-ViewDidLoad。它创建了一个新变量变量,并且该变量具有pictureNameLabel属性,从而导致您失去对在Interface Builder中创建的引用的引用。删除该行,并且一切都应该正常工作。

如果您已经通过Interface Builder创建了一个元素,您不需要自己分配& init,并将它添加到适当位置的视图中,因为它自动为您完成,并且属性已经存在设置指向它。如果您手动创建新视图,则需要这样做......但您还需要将其添加到视图层次结构中的某个位置作为子视图。

与您的问题无关,但您也创建了一个名为UILabel *pictureNameLabel;的变量。我假设你创建了这个变量作为综合属性pictureNameLabel的支持变量......但是,你将其合成为_pictureNameLabel,这意味着你现在有两个变量,_pictureNameLabelpictureNameLabel。这几乎肯定是一个错误。您应该删除pictureNameLabel的手动定义,或者如果您实际打算将其与名称相同的属性分开使用,则应将其重命名为distinct。有可能只是导致混淆&错误的道路。

+0

好的解释我认为,如你所说,他需要删除该变量并阅读更多关于此主题的内容http://www.hongkiat.com/blog/ios-development -guide - 第1部分/ –