2

如何在 NSTableView 中设置一列复选框?到目前为止,这就是我所做的,但它只是将 int 1 放在列中,而不是复选框:

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

2 回答 2

10

您需要使用 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;  
   }  
}
于 2011-05-12T05:30:19.253 回答
6

在 Interface Builder 中,将复选框单元格拖到表格列中。这将为该列设置数据单元格。在其检查器中设置您想要的单元格。然后删除您在此处对单元格起作用的所有代码,然后返回NSNumber.

为了响应您以编程方式执行此操作的愿望:Interface Builder 确实是这里的方法。它是为布置 GUI 对象而设计的。不过,我会告诉你怎么做。

首先,以另一个作为参数调用setObjectValue:an不会将第一个转换为第二个,也不会更改指针值或类似的东西。该方法更改单元格的—— 本质上,它显示为文本的对象。NSCellNSCellsetObjectValue:objectValue

如果您想以编程方式为表格列提供一个单元格,您需要在-[NSTableColumn setDataCell:]您想要的NSCell地方调用(awakeFromNib可能是一个不错的选择),但请注意,表格列为每一行重用相同的单元格实例,并且只是在绘制之前对其进行修改,以便正确显示。没有办法为列中的每一行设置不同的单元格, UPDATE: without subclassing NSTableColumn

于 2011-04-01T05:51:57.313 回答