1

问候!

我有一个基于视图的 NSTableView,其中自定义视图作为单元格(NSTableCellView 类)。自定义单元格中有 NSTextField 。

我需要在 NSTextField 内显示 3 行文本,单击单元格内容后必须长大以适合全文。所以,换句话说,我需要通过单击来增加 NSTextField 的高度和 NSCTableCellView 的高度。

算法是:

  1. 处理点击 NSTableCellView
  2. 计算 NSTextField 和 NSTableCellView 的新尺寸
  3. 通过 IBOutlet 将帧大小设置为 NSTextField
  4. 在类中存储新的 NSTableCellView 高度值并通过通知中心调用函数“RowHeightChanged”
  5. 从类值设置新的行高

这是一个代码片段:(我删除了一些无用的东西)

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 没有。我试图禁用动画 - 没有结果。我该如何解决?

道歉我的英语:)

4

0 回答 0