Xcode 在mac应用程序的NSTableView中实现复选框

Xcode 在mac应用程序的NSTableView中实现复选框,xcode,checkbox,rows,nstableview,nstablecolumn,Xcode,Checkbox,Rows,Nstableview,Nstablecolumn,首先,我搜索了3天,没有找到我要找的东西 第二点,我对Xcode编程非常陌生,所以请尽可能简单和/或详细地回答 在我的NSTableView中,我需要第一列为文本,然后是X复选框列数,最后一列为文本。X列数是一个基于我从SQLite文件中读取的条目数的变量 我的问题是: 如何在运行时定义类型和列数 如何知道复选框值是否已选中 如果我不知道tableview的单元格数,如何向其添加行 感谢您抽出时间回答 致以最良好的祝愿, Igor您想在运行时创建一个表,但不知道会有多少列 这是一件大事 阅读

首先,我搜索了3天,没有找到我要找的东西

第二点,我对Xcode编程非常陌生,所以请尽可能简单和/或详细地回答

在我的
NSTableView
中,我需要第一列为文本,然后是
X
复选框列数,最后一列为文本。
X
列数是一个基于我从SQLite文件中读取的条目数的变量

我的问题是:

  • 如何在运行时定义类型和列数
  • 如何知道复选框值是否已选中
  • 如果我不知道tableview的单元格数,如何向其添加行
感谢您抽出时间回答

致以最良好的祝愿,
Igor

您想在运行时创建一个表,但不知道会有多少列

这是一件大事

阅读
NSTableView
文档,您将找到
addTableColumn:
方法。在循环中继续创建colmn,不要忘记为所有列指定标识符

除此之外,您还需要一个复选框。创建复选框也不难

编辑:

对于复选框实现,请在此处找到

在要选中复选框的列中绘制复选框单元格。或者你可以通过编程来完成

我是通过IB做的

您应该创建一个数组来存储每个(行数)复选框的状态

- (id)init {
    self = [super init];
    if (self) {

        states=[[NSMutableArray alloc] initWithObjects:@"1", @"0", @"1", nil];
    }
    return self; }



- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    NSLog(@"Num of rows---- %ld", [names count]);
    return [names count];
}
检查tableIdentifier是否具有值“Check”

根据on/off更新复选框的值

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [states replaceObjectAtIndex:row withObject:value];
    [tableView reloadData]; 
}

谢谢例如,如何知道单元格10-5中复选框的状态?您有两个委托
-(void)tableView:(nsttableview*)tableView setObjectValue:(id)一个对象forTableColumn:(nsttablecolumn*)tableColumn行:(NSInteger)行
-(void)tableView:(nsttableview*)tableView objectValue:(id)一个对象forTableColumn:(nsttablecolumn*))tableColumn row:(NSInteger)row
在这里,您可以获得列和行,使用行号和带有标识符的列进行检查。您可以通过cell=5查找,而必须通过[columnIdentifier isEqualToString:@“5”]查找您好!又是我。。我正在搜索nstableview文档,但没有提到复选框。。我应该寻找什么来将某个表列设置为checkboxcolumn?谢谢真的不在哪里?没问题,我在这里,你需要通过编程创建复选框。问一个问题,我会在那里回答,这样其他人可能会受益。
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [states replaceObjectAtIndex:row withObject:value];
    [tableView reloadData]; 
}