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

use*_*064 2 cocoa objective-c 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]]];
}
Run Code Online (Sandbox Code Playgroud)

joh*_*ope 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;  
   }  
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*ell 6

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

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

首先,要求setObjectValue:NSCell与其他NSCell的参数不第一变成第二,或改变指针值或类似的东西.该setObjectValue:方法更改objectValue单元格 - 实质上是它显示为文本的对象.

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