NSTableView中的NSButton是否以编程方式?

时间:2011-04-01 04:52:38

标签: objective-c cocoa nstableview nsbutton

如何在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]]];
}

2 个答案:

答案 0 :(得分: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;  
   }  
}

答案 1 :(得分:6)

在Interface Builder中,将复选框单元格拖到表格列。这将设置列的数据单元格。在Inspector中设置您想要的单元格。然后删除您在此处作用于单元格的所有代码,并返回NSNumber

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

首先,使用另一个setObjectValue:作为参数调用NSCell上的NSCell不会将第一个变换为第二个,或者更改指针值或类似的东西。 setObjectValue:方法更改了objectValue of the cell - 实质上是它显示为文本的对象。

如果您想以编程方式为表格列提供单元格,则需要在某处调用-[NSTableColumn setDataCell:]所需的NSCellawakeFromNib可能是一个不错的选择),但是要注意,table列为每一行重用相同的单元格实例,并在绘制之前修改它以便正确显示。没有办法为列中的每一行设置不同的单元格,UPDATE:没有子类化NSTableColumn