0

動的にロードしたいテキストを表示するために使用される 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 を静的テキストとして初期化する必要はありません。

4

1 に答える 1

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

または、メソッドにNSNotification を投稿awakeFromNibし、コントローラーでそれを取得することもできます...テキストフィールドでどれだけの作業が必要かによっては、より良い設計になる可能性があります。

于 2013-07-15T08:37:15.847 に答える