代码之家  ›  专栏  ›  技术社区  ›  Ian Turner

根据表列的IsEnabled Biding自定义nsTextFieldCell

  •  0
  • Ian Turner  · 技术社区  · 17 年前

    我基本上尝试实现的是改变表格中单元格的格式,以便在单元格未启用时将其清空。

    要定义表列中的单元格是否已启用,我已使用已启用的绑定进行绑定,这很正常,可以启用表中某些行而不是其他行中的单元格。 我定义了一个子类nstextfieldcell,用于更改单元格的格式。这似乎也可以正常工作,但根据表中的单元格是否已启用,我无法触发更改。最初,我试图通过呼叫手机上的[自我启动]来启动开关。这是有效的,但开关从未激活过,我认为这是因为定义是否启用单元格的原始绑定是到表列,而不是到单元格。

    有人能轻易做到这一点吗?我注意到的唯一方法是对InstableColumn进行子类化,并编写一个自定义的DatacellForRow版本:但这似乎不是解决此问题的最佳方法。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Mark    17 年前

    在显示单元格之前,我使用表视图的委托方法设置文本颜色。您可以将单元格颜色设置为背景色,使其在禁用单元格时不可见。

    - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
    {
        NSColor* theColor = [NSColor blackColor];
        BOOL enable = YES;
        if(![self tableView:aTableView shouldSelectRow:rowIndex])
        {
                theColor = [aCell backgroundColor];
                enable = NO;
        }
    
        [aCell setTextColor:theColor];
        [aCell setEnabled:enable];
    }
    

    我简单地测试了这段代码,它起作用了。我没有使用绑定,但只要表的委托设置正确,这就不重要了。

        2
  •  1
  •   Ian Turner    17 年前

    谢谢你的答卷。它似乎对我不起作用,但它确实为我指明了正确的方向。我不能做任何我想做的事情,因为用背景色填充一个单元格有点粗糙的方形边缘,但它的工作相当强大,所以我现在就用它。我使用的实际代码是:

    - (void)tableView:(NSTableView *)aTableView 
      willDisplayCell:(id)aCell 
      forTableColumn:(NSTableColumn *)aTableColumn 
              row:(int)rowIndex
    {
        NSColor *cellColor = [NSColor lightGrayColor];
        if([aCell isEnabled])
        {
            cellColor = [NSColor whiteColor];
        }
        if([aCell isKindOfClass:[NSTextFieldCell class]])
        {
            [aCell setDrawsBackground:YES];
        }
        [aCell setBackgroundColor:cellColor];
    }