ユーザーがテキストを挿入しているときに自動的にサイズを変更するカスタムの「NSTextField」を実装しようとしています。
これは十分に単純なタスクであり、これが私が使用しているコードです。
- (void)textDidChange:(NSNotification *)aNotification
{
[super textDidChange:aNotification];
[self invalidateIntrinsicContentSize];
}
- (NSSize)intrinsicContentSize
{
if ( ![self.cell wraps] ) {
return [super intrinsicContentSize];
}
NSRect frame = [self frame];
CGFloat width = frame.size.width;
frame.size.height = CGFLOAT_MAX;
NSString *cellTitle = ((NSCell *)self.cell).title;
CGFloat height = [self.cell cellSizeForBounds: frame].height;
return NSMakeSize(width, height);
}
どちらが仕事をしますか。NSTextField
好奇心は、のセルタイトルを呼び出す行にコメントすると
NSString *cellTitle = ((NSCell *)self.cell).title;
動作を停止します。セルは要求されるまでタイトルを更新しないようです。もちろん、セルのタイトルが変更されない場合、ユーザーがテキストを入力したときにテキストフィールドのサイズを変更することはできません。
この動作は機能ですか、それともバグですか?
私が言ったように、上記のコードは仕事をするので、これはもっと好奇心です。唯一の煩わしさは、回線が警告を生成することです。これを行うためのより良い方法があるかどうかを知りたいと思います。
編集:[(NSCell *)self.cell title];
コンパイラへの行を変更すると文句が止まるかどうかを理解したことを気にしないでください。ただし、機能やバグに対する好奇心は依然として残っています。