如何在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]]];
}
答案 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:]
所需的NSCell
(awakeFromNib
可能是一个不错的选择),但是要注意,table列为每一行重用相同的单元格实例,并在绘制之前修改它以便正确显示。没有办法为列中的每一行设置不同的单元格,UPDATE:没有子类化NSTableColumn 。