如何通过编程改变在nib文件中创建的UIView中的标签



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

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

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

相关内容

  • 没有找到相关文章

最新更新