2009-02-05 43 views
0

我基本上要達到的的IsEnabled招標是改變一個單元格的格式在表中的空白出來,如果沒有啓用電池。定製的NSTextFieldCell取決於表列

定義表中的列的單元格是否被啓用,我使用啓用結合結合,這是工作的罰款,使表中的某些行,而不是在其他細胞。 我已經定義了一個NSTextFieldCell的子類,用於更改單元格的格式。這也似乎工作正常,但我無法觸發更改取決於表中的單元格是否啓用。本來我試圖通過調用單元格上的[self isEnabled]來激活開關。這工作,但交換機從未激活,我認爲是因爲定義是否啓用單元格的原始綁定是到表列而不是單元格。

有沒有人有一種方法可以輕鬆地實現這一目標。我注意到的唯一方法是對NSTableColumn進行子類化並編寫dataCellForRow的自定義版本:但是,這似乎不是解決此問題的最佳方法。

回答

1

謝謝你們的答案馬克。它似乎沒有爲我工作,但它確實指向了我的正確方向。我無法完成我想做的所有事情,因爲用背景色填充單元格對於方形邊緣有點苛刻,但它的工作原理相當強大,所以現在我將使用它。我用實際的代碼是:

- (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]; 
} 
1

我用的是表視圖的委託方法顯示細胞之前,設置文本顏色。您可以將單元格顏色設置爲背景顏色,以便在禁用單元格時使其不可見。

 
- (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]; 
} 

我測試了這段代碼,並且它工作。我沒有使用綁定,但只要表的委託設置正確,這對此應該沒有關係。