【问题标题】:Coloring a Row in an NSTableView为 NSTableView 中的行着色
【发布时间】:2010-01-08 14:37:46
【问题描述】:

我要做的是在单击 I 按钮时在 NSTableView 中设置所选行的背景颜色。 我见过人们使用 tableView:willDisplayCell:forTableColumn:row:setBackgroundColor: 的其他情况,但我认为这不适用于我希望在单击按钮时发生的情况。

我知道我可以使用 NSTableView 的selectedRow 方法找到选定的行,并使用setBackgroundColor: 为单元格设置背景颜色,但我不知道如何从选定行的 NSInteger 获取到一个 NSCell 来设置背景颜色。

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    NSTableView 每列仅使用一个NSCell 实例。绘制内容时,每行都会更新单元格。这就是为什么没有办法获取指定行的单元格的原因——您必须修改 tableView:willDisplayCell:forTableColumn:row: 中的单元格。

    您可以使用reloadDataForRowIndexes:columnIndexes: 告诉表格视图只更新一行。

    【讨论】:

    • 我刚刚尝试过这个grab.by/1CoC,但它会将每一行都涂成灰色,而不仅仅是我重新加载的那一行。
    • 1.不要使用int。使用NSInteger。 2.尝试按照尼古拉所说的去做。 (请注意,它需要 Snow Leopard。) 3. 让您的 tableView:willDisplayCell:forTableColumn:row: 方法检查是否选择了行以及用户是否单击了按钮。
    • 1.行。 2 & 3. 我不能完全按照他说的做,因为我有一个 NSOutlineView,还是因为 NSOutlineView 继承自 NSTableView,我可以这样做?
    • 当然,既然 NSOutlineView 是 NSTableView,你可以用它做任何 NSTableView 能做的事。 (继承==“是一个”)
    • 好的,这就是我现在得到的,grab.by/1Dp2,但是我不确定如何判断用户是否点击了按钮。
    【解决方案2】:

    设置背景颜色为NSTableviewRow

      - (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell1 forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
    {
          if(row==1)
             [cell1 setBackgroundColor:[NSColor redColor]];
          else if(row==2||row==3)
             [cell1 setBackgroundColor:[NSColor greenColor]];
          else
             [cell1 setBackgroundColor:[NSColor clearColor]];
    }
    

    使用这种方法,我们可以为每一行赋予不同的颜色.. 确保在NSTextFieldCell 上启用了drawsBackground,否则这将无效!

    【讨论】:

      【解决方案3】:

      如果您只是想更改整个选定行的颜色:

      NSInteger selectedRow = [self.nsTableView selectedRow];
      NSTableRowView* rowView = [self.nsTableView rowViewAtRow:selectedRow makeIfNecessary:NO];
      [rowView setBackgroundColor:[NSColor blackColor]];
      

      glhf

      【讨论】:

      • 仅当您使用基于视图的表格时。如果我们谈论的是基于单元格的表格,就像我认为的那样,那么 rowViewAtRow:... 方法将始终返回 nil。
      猜你喜欢
      • 2011-02-16
      • 2012-06-10
      • 2023-04-07
      • 2018-06-28
      • 2012-06-23
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多