电贺!
我有一个基于视图的NSTableView,自定义视图作为单元格(NSTableCellView类)。 自定义单元格中有NSTextField。
我需要在NSTextField中显示3行文本,并且在单击单元格内容后必须长大以适合全文。 所以,我需要通过点击换句话来增加NSTextField的高度和NSCTableCellView的高度。
Alghoritm是:
这是一个代码片段:(我删除了一些无用的东西)
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时,它的帧只会在第二个时间长大并返回到init大小,之后开始动画来设置单元格的属性高度。 结果 - 单元格高度上升,但NSTextField无。我试图禁用动画 - 没有结果。我该如何解决这个问题?
用我的英语说道:)