tableview中的CheckBox

时间:2009-06-20 10:04:48

标签: cocoa checkbox tableview

我在将复选框放入UITableView时遇到了麻烦。我在这里发布了我的部分代码。

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    NSButtonCell *cell=[[NSButtonCell alloc] init];
    NSString *strDisplayPlaylistName;
    strDisplayPlaylistName=[playListNameArray objectAtIndex:row];
    [cell setTitle:strDisplayPlaylistName];
    [cell setAllowsMixedState:YES];
    [cell setButtonType:NSSwitchButton];
    return cell; 
}


- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {          
    NSCell *aCell = [aTableColumn dataCellForRow:rowIndex];
    [aCell setNextState];
    //NSCell *aCell=[aAddedCells objectAtIndex:rowIndex];
    //[aCell setNextState];
}

我在UITableView中找到了复选框。但问题是我无法取消选中按钮。还有什么可做的。我是可可编程的新手。

3 个答案:

答案 0 :(得分:5)

你错过了几件重要的作品。您需要更新模型(数据stcuture)以响应tableValue:setObjectValue:forTableColumn:row:message,以便您可以正确地从tableView返回新值:objectValueForTableColumn:row:method。

以下是一些表数据源方法,假设您的'myRows'数组中填充了带有'booleanAttribute'属性的对象。

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [myRows count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    BOOL value = [[myRows objectAtIndex:row] booleanAttribute];
    return [NSNumber numberWithInteger:(value ? NSOnState : NSOffState)];
}

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [[myRows objectAtIndex:row] setBooleanAttribute:[value booleanValue]];
}

您还应该在界面构建器中设置表格单元格。您可以将配置为标准复选框的按钮单元直接拖到其中一个表列上。

答案 1 :(得分:2)

我不确定你为什么要在代码中创建单元格。您只需将单元格拖到Interface Builder中的表列即可。

此外,setObjectValue:是您响应单元格状态更改的位置。用户已将单元状态更改为关闭;然后发送setNextState并将其更改回来。这就是为什么单元格似乎没有取消选中的原因:你不断重新检查它。

您需要做的是根本不触摸单元格,而是设置对象值(对于此列,可能是包含YESNO的布尔NSNumber)模型中相应属性的新值。

当然,还要确保将列设置为可编辑。

答案 2 :(得分:2)

如果您将NSTableView内容模式设置为“基于单元格”,则当您移动复选框时,它将是“基于视图”。