2011-04-01 31 views
2

如何在NSTableView中設置一列複選框?到目前爲止,這是我做了什麼,但它只是把整型1列,而不是複選框:NSTableView內的NSButton以編程方式?

-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row { 
    if ([[tableColumn identifier] isEqualToString:@"Enable"]) { 
     NSButtonCell *cell=[[[NSButtonCell alloc] init] autorelease]; 
     [cell setAllowsMixedState:YES]; 
     [cell setButtonType:NSSwitchButton]; 
     NSCell *aCell = [tableColumn dataCellForRow:row]; 
     [aCell setObjectValue:cell]; 
     return [NSNumber numberWithInt:1]; 
    } 

    return [[data objectAtIndex:row+1] objectAtIndex:[[data objectAtIndex:0] indexOfObject:[tableColumn identifier]]]; 
} 
+0

非但沒有細胞在'objectValueForTableColumn的'(I」米不清楚你想要做什麼)。 – Richard 2011-04-14 20:23:33

回答

6

在Interface Builder中,拖動一個複選框細胞的表列。這將設置列的數據單元格。無論您想要在Inspector中設置單元格。然後刪除所有在這裏對代碼單元起作用的代碼,然後返回NSNumber

爲了滿足您以編程方式執行此操作的願望:界面構建器真的是這裏的方法。它專爲佈置GUI對象而設計。不過,我會告訴你如何去做。

首先,調用上的NSCellsetObjectValue:與另一NSCell作爲參數不所述第一變換到第二,或改變指針值或類似的東西。 setObjectValue:方法更改objectValue of the cell - 本質上,它顯示爲文本的對象。

如果你想以編程方式提供該表列的單元格,你需要調用-[NSTableColumn setDataCell:]與所需NSCell某處(awakeFromNib可能會是一個不錯的選擇),但被警告,表列重複使用相同的細胞每個行都有一個實例,並且在繪製之前修改它,以便正確顯示。沒有辦法爲列中的每一行設置不同的單元格,更新:,但不包括NSTableColumn

+0

感謝您的答案,但我想以編程方式做到這一點。 – user635064 2011-04-01 06:12:03

+0

@ user635064:我可以知道爲什麼嗎? – 2011-04-01 06:23:35

+0

我想添加一個複選框到表中的一列,但只要我把它拖入,我不能再在tableView:objectValueForTableColumn:row:方法中爲其他列返回字符串。我找不到任何文檔,該方法只需要返回一個對象(id),但我不知道我應該返回什麼。我可以在同一個表中沒有字符串和複選框嗎? – TijuanaKez 2012-04-18 08:36:16

10

您需要使用dataCellForTableColumn委託方法。 ...`,你應該實現`NSTableViewDelegate`方法`的tableView:willDisplayCell:forTableColumn:行:`或`的tableView:dataCellForTableColumn:行:

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 

    if([[tableColumn identifier] isEqualTo:@"delete"]){ 

    NSButtonCell *cell = [[[NSButtonCell alloc] init] autorelease]; 
    [cell setAllowsMixedState:YES]; 
    [(NSButtonCell *)cell setButtonType:NSSwitchButton]; 
    [cell setTitle:@""]; 

    return cell; 

    }else { 
    NSCell *cell = [tableColumn dataCell]; 
    return cell; 
    } 
} 
+0

這對我來說很好....但是如何添加動作 – 2011-06-24 05:38:55

+1

它工作的很好,但是當我拖放我的單元格的行時,按鈕保留在「舊」位置,它們不會重繪。如何解決這個問題? – aneuryzm 2012-05-14 12:20:51

相關問題