xib ファイルからロードされるカスタム UIView (MyView) オブジェクトがあります。MyView.m には、初期化を行う initWithCoder で呼び出されるメソッドがあります。これはほとんどの場合機能しますが、ここでいくつかの IBOutlet ラベル プロパティにテキストを設定しようとしましたが、機能していませんでした。プロパティがこの時点で初期化されていないためです。
drawRect メソッドでアウトレットのテキストを設定してみましたが、うまくいきました。しかし、必要のない場合に drawRect を実装すると、パフォーマンスが低下する可能性があることを読んだと思います。私の質問は、IBOutlet ラベル プロパティのテキストを設定するのに最適な場所はどこでしょうか? (私が実際に行っているのは、xib にあるもののローカライズされたバージョンに設定することです。ローカライズされた xib ファイルについては知っていますが、コードでテキストを設定したいと考えています。)
ここにいくつかのコードがあります。ビューコントローラーでビューを初期化する方法は次のとおりです。
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView"
owner:self
options:nil];
_myView = [nibContents objectAtIndex:0];
MyView.m の initWithCoder メソッドは次のとおりです。
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
[self localizeLabels];
}
return self;
}
localizeLabels メソッドは次のとおりです。
- (void)localizeLabels
{
self.powerPlant.text = NSLocalizedString(@"POWERPLANTBREAKDOWN_HEADERCOLUMN1", nil);
self.output.text = NSLocalizedString(@"POWERPLANTBREAKDOWN_HEADERCOLUMN2", nil);
self.capacity.text = NSLocalizedString(@"POWERPLANTBREAKDOWN_HEADERCOLUMN3", nil);
}
これらのメソッドがブレークポイントを使用して呼び出されること、およびプロパティが localizeLabels メソッドで nil であることを確認しました。