以编程方式使用自定义文本初始化NSTextfield

时间:2013-07-15 05:15:58

标签: macos cocoa

我的XIB文件中有一个textfield标签,用于显示我想要动态加载的一些文本。以下是我的应用程序的当前流程:

- 在XIB文件中,文本字段设置为静态文本 - 运行应用程序后,窗口将加载文本字段和静态文本 - 加载后,调用windowDidLoad并将文本更改为动态

- (void)windowDidLoad
{
    [super windowDidLoad];

    NSDate *currentDate = [NSDate date];
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:currentDate];
    [myTextField setStringValue:[NSString stringWithFormat:@"Year: %ld", [components year]]];
}

不幸的是,在文本更改之前有一点延迟。将文本字段初始化为动态内容的最佳方法是什么?因此,myTextField不必初始化为静态文本。

1 个答案:

答案 0 :(得分:1)

您可以创建一个NSTextField子类,覆盖awakeFromNib方法并将代码放在那里......这是一些(未经测试的)代码:

// MyDateTextField.h

@interface MyDateTextField : NSTextField

@end



// MyDateTextField.m

@implementation MyDateTextField

- (void)awakeFromNib {
    NSDate *currentDate = [NSDate date];
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:currentDate];
    [myTextField setStringValue:[NSString stringWithFormat:@"Year: %ld", [components year]]];
}

@end

或者,您可以在awakeFromNib方法中发布NSNotification,然后在您的控制器中选择它...这可能是更好的设计,具体取决于您需要文本字段的数量。