如何以编程方式更改在nib文件中创建的UIView中的标签?

时间:2011-10-06 18:21:35

标签: cocoa-touch uiview loadnibnamed

我无法以编程方式更改标签中的文字。

当我运行以下代码时,NSLog会显示“将myLabel设置为= Hello World!”,但屏幕上的标签不会更改。

    UIViewOverlay *overlayWindow;
    overlayWindow = [[[NSBundle mainBundle] loadNibNamed:@"UIViewOverlay" owner:self options:nil] objectAtIndex:0];
    [self addSubview:overlayWindow];

    [overlayWindow setMyLabel:@"Hello World!"];

我的NIB文件有一个300x300的窗口,里面有一些标签和按钮。 有一个标签,连接到插座中的myLabel。 UIView确实显示,只是无法以编程方式更改文本。

UIViewOverlay.h

#import <UIKit/UIKit.h>

@interface UIViewOverlay : UIView {
    IBOutlet UILabel *myLabel;
}
- (void)setMyLabel:(NSString *) label;

@end

UIViewOverlay.m

#import "UIViewOverlay.h"

@implementation UIViewOverlay

- (void)setMyLabel:(NSString *) label {
    myLabel.text = label;                // THIS LINE IS NOT WORKING! :-(
    NSLog(@"Setting myLabel to = %@", label);    // This line is working.
 }

@end

提前致谢..

2 个答案:

答案 0 :(得分:1)

确保代码中有一个标签对象,例如:

    IBOutlet UILabel* aLabel;  

在界面构建器中(您可能已经这样做了):将aLabel(或您使用的任何名称)插座连接到实际标签。这可以通过控制单击并从文档窗口中的文件所有者对象拖动到视图中的标签来完成。将出现一个灰色的小窗口,其中至少有两个选项,一个是前面定义的aLabel,另一个是视图(这是viewcontrollers所需的默认插座,它将有一个短划线表示它已连接到东西)。单击aLabel选项以选择它。 (老实说,在我面前没有我的mac,我从this link复制了本段的大部分说明。)

您有一个名为aLabel的对象,您现在可以将其视为任何其他变量。如果要更改文本值,请尝试以下操作:

aLable.text = @"some text";

也许你没有建立联系。你能试试以下吗?

#import "UIViewOverlay.h"

@implementation UIViewOverlay

- (void)showMyLabel:(NSString *) label {
    NSLog(@"My current label contents (myLabel) = %@", myLabel.text);    // ** changed to myLabel.text
 }

@end

如果您无法打印原始值,则表示您未连接。

我希望有所帮助。

答案 1 :(得分:1)

您使用不正确的访问者名称来设置标签字符串。

在cocoa中,setFoo是分配名为foo的实例变量的方法。这不仅仅是一个惯例,许多功能领域依赖于它,例如使用属性,键值编码等。

在您的代码中,您的标签名为myLabel。您设置该标签的文本的方法称为setMyLabel。这可能导致你的插座在加载笔尖时没有被连接,因为运行时可能试图使用该方法首先将标签分配给你的实例变量,或者上面的所有内容都没有效果你有只是没有连接你的插座。