问候!
我有一个基于视图的 NSTableView,其中自定义视图作为单元格(NSTableCellView 类)。自定义单元格中有 NSTextField 。
我需要在 NSTextField 内显示 3 行文本,单击单元格内容后必须长大以适合全文。所以,换句话说,我需要通过单击来增加 NSTextField 的高度和 NSCTableCellView 的高度。
算法是:
- 处理点击 NSTableCellView
- 计算 NSTextField 和 NSTableCellView 的新尺寸
- 通过 IBOutlet 将帧大小设置为 NSTextField
- 在类中存储新的 NSTableCellView 高度值并通过通知中心调用函数“RowHeightChanged”
- 从类值设置新的行高
这是一个代码片段:(我删除了一些无用的东西)
TickCellTableView:
@implementation TickCellTableView
// Other Constants
@synthesize textFieldInitHeight = _textFieldInitHeight;
@synthesize rowHeight = _rowHeight;
@synthesize rowIndex = _rowIndex;
- (void)mouseDown:(NSEvent *)theEvent {
if (![self.superview isKindOfClass:[NSTableCellView class]])
[super mouseDown:theEvent];
CGFloat TextFieldFitHeight = [self getHeightForStringDrawing: self.textField.stringValue
withFont:[self.textField font]
forTextWidth:[self.textField frame].size.width + 10.0];
if ([self.textField frame].size.height < TextFieldFitHeight)
{
NSSize size = [self.textField frame].size;
size.height = TextFieldFitHeight;
[self.textField setFrameSize:size];
self.rowHeight = [self frame].size.height + (TextFieldFitHeight - _textFieldInitHeight);
[[NSNotificationCenter defaultCenter] postNotificationName:@"RowHeightChanged"
object:self.rowIndex];
}
}
@end
NSTableView 委托:
@implementation DisplayTicksView
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(RowHeightChanged:)
name: @"RowHeightChanged"
object:nil];
}
-(void)RowHeightChanged:(NSNotification *)notification
{
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:[notification.object integerValue]];
[tableView noteHeightOfRowsWithIndexesChanged:indexSet];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return [ticksArray count];
}
@end
问题是当我单击 NSTextField 时,它的框架只增长一秒钟并返回到初始大小,然后开始动画以设置单元格的属性高度。结果 - 单元格高度上升,但 NSTextField 没有。我试图禁用动画 - 没有结果。我该如何解决?
道歉我的英语:)