如何使用NSTextField设置NSTableCellView的高度?

时间:2012-07-18 12:11:30

标签: macos cocoa nstableview nstablecolumn

电贺!

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

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

Alghoritm是:

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

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

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

    用我的英语说道:)

0 个答案:

没有答案