1

我创建了一个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,则控件会正确更改其大小。但是,如果我从控件中键入或删除文本,它不会在需要换行时调整大小。我真的无法弄清楚为什么控件在这两种情况下的行为不同?

4

1 回答 1

0

我相信你需要实施

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row

在你的NSTableViewDelegate中。

于 2013-01-10T19:12:31.247 回答