objective-c - 从另一个类更新 NSTextField 的文本

标签 objective-c cocoa

我注意到我无法更新 NSTextField 上的文本:

mainClass.h
@property(strong, nonatomic) NSTextField *titleLabel; 

mainClass.m    

-(void)viewDidLoad {
LabelClass *element = [[LabelClass alloc] init];
[self.view addSubview:[element label:self.titleLabel title:@"My label" xCoord:0 yCoord:0 width:100 height:50]];
}

现在如果尝试更新 NSTextField 文本,它不起作用:

mainClass.m

-(void)someMethod{
[self.titleLabel setStringValue:@"Updated text"];
}

我认为重要的是要注意“self.titleLabel”属性是在我试图更新标签“mainClass.m”的当前类中创建的。我从“LabelClass.m”调用标签的类仅包含创建标签的方法,因此我只需创建该类的一个实例,创建标签并设置“self.titleLabel”:

LabelClass.m

@implementation LabelClass

-(NSTextField *)label:(NSTextField *)label title:(NSString *)title xCoord:(CGFloat)x yCoord:(CGFloat)y width:(CGFloat)width height:(CGFloat)height{
    NSTextField *textField = [[NSTextField alloc] initWithFrame:CGRectMake(x, y, width, height)];
    [textField setStringValue:title];
    [textField setAlignment:NSCenterTextAlignment];
    [textField setEditable:NO];
    [textField setDrawsBackground:NO];
    [textField setSelectable:NO];
    [textField setBezeled:NO];
    return textField;
}

最佳答案

您的问题在这里:

-(void)viewDidLoad {
    LabelClass *element = [[LabelClass alloc] init];
    [self.view addSubview:[element label:self.titleLabel title:@"My label" xCoord:0 yCoord:0 width:100 height:50]];
}

您从对 LabelClass 的调用中返回一个 NSTextField,但您从未将其分配给您的 self.titleLabel。试试这个:

-(void)viewDidLoad {
    LabelClass *element = [[LabelClass alloc] init];
    self.titleLabel = [element labelWithTitle:@"My Label" xCoord:0 yCoord:0 width:100 height:50];
    [self.view addSubview:self.titleLabel];
}

然后修改您的 label:title:xCoord:yCoord:width:height: 方法以删除 label 参数,因为您没有传递一个参数,而是返回一个。

-(NSTextField *)labelWithTitle:(NSString *)title xCoord:(CGFloat)x yCoord:(CGFloat)y width:(CGFloat)width height:(CGFloat)height{
    NSTextField *textField = [[NSTextField alloc] initWithFrame:CGRectMake(x, y, width, height)];
    [textField setStringValue:title];
    [textField setAlignment:NSCenterTextAlignment];
    [textField setEditable:NO];
    [textField setDrawsBackground:NO];
    [textField setSelectable:NO];
    [textField setBezeled:NO];
    return textField;
}

关于objective-c - 从另一个类更新 NSTextField 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214083/

相关文章:

objective-c - 如何从 swift 将可选值传递给 Objective C 类

ios - 维护 View Controller 之间的信息

xcode - 在cocoa应用程序中创建菜单和子菜单

objective-c - NSImageview 在运行时添加不响应 mousedown 事件

ios - 使用 json 时从 TableView 中删除

iphone - 我应该用什么来代替 OpenGL ES 2.0 中的 glTexCoordPointer()?

objective-c - 由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序,原因 : '[<AboutViewController 0x91cc1d0> setValue:forUndefinedKey:]:

objective-c - 从 iPhone 向 Mac 发送消息

objective-c - 我可以查看Objective-C中appendFormat实例方法的实现吗?

macos - Unicode 与格式