【问题标题】:How to set frame of NSTextFieldCell in NSTableView如何在 NSTableView 中设置 NSTextFieldCell 的框架
【发布时间】:2017-03-30 15:36:55
【问题描述】:

我在 Mac 中设置 NSTextFieldCell 的框架时遇到问题。我的NSTextFieldCell 位于列的 (0,0) 点。我需要在 y 位置有 4px 的间隙。下面是现有 UI 的图片。

这是.xib结构的样子:

我试图设置框架的委托方法如下:

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)aRow
{
    if ([[aTableColumn identifier] isEqualToString:@"notes"])
    {
        [aCell setBackgroundColor:[NSColor redColor]];

        NSTextFieldCell *theCellView = aCell;
        NSView *controlView = [theCellView controlView];
        NSRect frame = controlView.frame;
        frame.origin.x = 120;
        frame.origin.y = 130;
        [controlView setFrame:frame];       
    }
}

【问题讨论】:

  • 表格视图应该是基于视图还是基于单元格?
  • 谢谢@Willeke。它是基于细胞的。
  • cell的controlView为table view。

标签: objective-c macos nstableview nstextfield


【解决方案1】:

单元格没有框架。单元格是轻量级对象,在拥有控制视图告诉它们的位置绘制。表格视图可以使用单个单元格来绘制给定列的所有行。它将计算列的一行的框架,使用该行和列的值配置单元格,并告诉单元格在它计算的框架中绘制自己。然后,它将为下一行配置单元格并告诉单元格在该行的框架中绘制自己。等等。

因此,您需要专注于表格视图,而不是影响单元格绘制框架的单元格,因为计算该框架的是表格视图。您是否尝试过将intercellSpacing 设置为非零height

此外,您应该考虑转换为基于视图的表格视图,您可以在其中拥有更大的控制权。

【讨论】:

  • 谢谢肯。该应用程序已经开发,因此没有重新开发的范围。我会尝试 intercellSpacing。实际上我需要 5px 的填充。尝试使用 NSMutableParagraph 但没有运气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多