2009-06-20 55 views
3

我在将复选框放入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中的复选框。但问题是我无法取消选中按钮。还有什么更多的事情要做。我是可可编程的新手。

回答

4

你错过了几件重要的作品。您需要更新模型(数据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]]; 
} 

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

2

我不知道为什么你要在代码中创建单元格。您可以将单元格拖到Interface Builder中的表格列中。

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

你需要做的不是触及单元格,而是将对象值(对于此列,它可能是一个布尔型NSNumber,包含YESNO)设置为相应属性的新值你的模型。

此外,当然,确保列设置为可编辑。

2

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