2013-01-10 26 views
1

我已经创建了一个NStextField的子类,它扩大和缩小以适应文本中的变化。这里是代码:对于NSTableCellViews,自动布局系统是否有所不同?

- (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]; 
} 

我已经验证了控件做了我想要它在几个项目中做的事情。最近我尝试将控件放在NSTableCellView内,并停止工作。如果我以编程方式设置控件的stringValue,控件将正确更改其大小。但是,如果我从控件中键入或删除文本,则在需要换行时不会调整其大小。 我不明白为什么控制在这两种情况下表现不同?

回答

0

我相信你将需要实现

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

NSTableViewDelegate

+0

毫米,我已经在我的项目中实现了,但它不适用于编辑。实际上,我实现了textDidChange:(NSNotification *)aNotification,它在您输入单元格时获取通知,并将noteHeightOfRowsWithIndexesChanged:发送到我的表视图,但不调整欢乐结果的大小。在表视图上调用setNeedsDisplay也不会强制重绘。不知道它可能与nstextfieldcell ... –

相关问题