NStextField
テキストの変更に合わせて拡大縮小するのサブクラスを作成しました。コードは次のとおりです。
- (NSSize)sizeToFitContent
{
NSRect frame = [self frame];
CGFloat width = frame.size.width;
frame.size.height = CGFLOAT_MAX;
CGFloat height = [self.cell cellSizeForBounds: frame].height;
return NSMakeSize(width, height);
}
- (void)textDidChange:(NSNotification *)aNotification
{
[super textDidChange:aNotification];
[(NSCell *)self.cell title];
NSSize newSize = [self sizeToFitContent];
if (newSize.height != self.frame.size.height) {
[self invalidateIntrinsicContentSize];
}
}
- (NSSize)intrinsicContentSize
{
if ( ![self.cell wraps] ) {
return [super intrinsicContentSize];
}
return [self sizeToFitContent];
}
いくつかのプロジェクトで、コントロールがやりたいことを実行することを確認しました。最近、コントロールを a 内に配置しようとしましたが、NSTableCellView
動作しなくなりました。プログラムでコントロールの stringValue を設定すると、コントロールのサイズが正しく変更されます。ただし、コントロールからテキストを入力または削除すると、新しい行が必要なときにサイズが変更されません。これら 2 つの状況でコントロールの動作が異なる理由がよくわかりません。