3

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

第二点,我对 Xcode 编程非常陌生,所以请让您的答案尽可能简单和/或详细!

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

我的问题是:

  • 如何在运行时定义我拥有的类型和列数?
  • 我如何知道是否选中了复选框值?
  • 如果我不知道它有多少个单元格,如何向 tableview 添加行?

感谢您花时间回答!

最好的问候,伊戈尔

4

1 回答 1

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];
}

检查具有值“检查”的 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;
}

根据开/关更新复选框的值。

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [states replaceObjectAtIndex:row withObject:value];
    [tableView reloadData]; 
}
于 2013-01-10T17:38:20.477 回答