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

sha*_*rgy 3 variables checkbox xcode rows tableview

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

第二点,我是一个非常初学的xcode编程,所以请保持你的答案尽可能简单/或详细!

我有以下情况:

我在xcode中有一个tableview,需要第一列是文本,然后X列是复选框列,最后一列是文本.X列是一个变量,我读取了一个sqlite文件,并根据这些条目为每个条目创建一个列.然后将在稍后的所有行添加.

我的问题是,我如何在运行时定义什么类型和我有多少列?我如何知道复选框的值(如果选中或不检查)如果我不知道它有多少个单元格,我如何向tableview添加行?

谢谢你抽出宝贵的时间!

最好的祝福

伊戈尔

Ano*_*dya 6

你想在运行时创建一个表,你不知道有多少列!

这是一个大问题.

阅读NSTableView文档,你会发现addTableColumn:方法.在循环中继续创建colmn并且不要忘记给所有列赋予标识符.

在这个你想要一个复选框.创建复选框也不困难.

编辑:

对于复选框实现,请在此处查找项目.

在要复选的列中绘制checkBoxCell.或者你可以以编程方式进行.

我是通过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];
}
Run Code Online (Sandbox Code Playgroud)

检查具有值"check"的tableIdentifier.

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    if ([[tableColumn identifier] isEqualTo:@"name"]) {
        return [names objectAtIndex:row];
    }
    else if ([[tableColumn identifier] isEqualTo:@"check"]) {

        return [states objectAtIndex:row];
    }
    else if ([[tableColumn identifier] isEqualTo:@"states"]) {
        return [states objectAtIndex:row];
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

按开/关更新复选框的值.

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