【问题标题】:CheckBox in tableview表格视图中的复选框
【发布时间】:2010-11-04 12:21:12
【问题描述】:

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

【问题讨论】:

    标签: cocoa checkbox tableview


    【解决方案1】:

    你错过了几个重要的部分。您需要更新模型(数据结构)以响应 tableValue:setObjectValue:forTableColumn:row: 消息,以便您可以正确地从 tableView:objectValueForTableColumn:row: 方法返回新值。

    以下是一些表数据源方法,假设您有一个“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)作为模型中的适当属性。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 1970-01-01
          • 2011-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多