我正在尝试实现一个自定义的“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
's 单元格标题的行
NSString *cellTitle = ((NSCell *)self.cell).title;
它停止工作。似乎该单元格在请求之前不会更新其标题。当然,如果单元格的标题没有改变,那么当用户输入文本时,文本字段就不能自行调整大小。
这种行为是功能还是错误?
正如我所说,上面的代码完成了这项工作,所以这更像是一种好奇心。唯一的烦恼是该行会产生警告,我想知道是否有更好的方法来做到这一点。
编辑:没关系,我发现如果我将行更改为[(NSCell *)self.cell title];
编译器停止抱怨。尽管如此,对功能或错误的好奇心仍然存在。