1

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

当我运行以下代码时,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

提前致谢..

4

2 回答 2

1

确保您的代码中有一个标签对象,如下例所示:

    IBOutlet UILabel* aLabel;  

在界面生成器中(您可能已经这样做了):将 aLabel(或您使用的任何名称)出口连接到实际标签。这可以通过控制单击并从文档窗口中的文件所有者对象拖动到视图中的标签来完成。将出现一个灰色的小窗口,其中至少有两个选项,一个是前面定义的 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

如果您无法打印原始值,则说明您没有连接。

我希望这会有所帮助。

于 2011-10-06T18:51:55.553 回答
1

您为设置标签字符串的方法使用了不正确的访问器名称。

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

在您的代码中,您的标签称为myLabel. 您设置该标签文本的方法称为setMyLabel。这会导致在加载 nib 时无法连接您的插座,因为运行时可能首先尝试使用该方法将标签分配给您的实例变量,或者上述所有方法都没有效果并且您有只是没有连接你的插座。

于 2011-10-06T18:53:10.300 回答