我无法通过编程方式更改标签中的文本。
当我运行下面的代码时,NSLog确实显示"Setting myLabel to = 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
Thanks in advance.
您设置标签字符串的方法使用了不正确的访问器名称。
在cocoa中,setFoo
是分配实例变量foo
的方法。这不仅仅是一种惯例,许多功能领域都依赖于它,例如属性的使用,键值编码等。
在您的代码中,您的标签称为myLabel
。设置该标签的文本的方法称为setMyLabel
。当nib加载时,这可能会导致你的outlet没有连接,因为运行时可能会尝试使用该方法首先将标签分配给你的实例变量,或者上述所有方法都没有效果,你只是没有连接你的outlet。
确保在代码中有一个标签对象,如下例所示:
IBOutlet UILabel* aLabel;
在接口生成器中(您可能已经这样做了):将aLabel(或您使用的任何名称)出口连接到实际的标签。这可以通过从文档窗口中的File 's Owner对象control单击并拖动到视图中的标签来实现。一个灰色的小窗口将出现,至少有两个选项,一个将是前面定义的aLabel,另一个将是视图(这是视图控制器所需的默认出口,它将有一个破折号表示它已经连接到某些东西)。单击aLabel选项来选择它。(老实说,在没有mac的情况下,我从这个链接复制了这一段的大部分说明。)
你有一个名为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
如果无法打印原始值,则说明未连接。