0

情况:

有两个表,一个主表和一个辅助表。主表连接到核心数据数据库。我已经按照我想要的方式设置了核心数据和主表。一切正常,我很高兴。

现在我必须将列添加到第二个表中。基本上第二个表格视图只有一列(图像和文本表格单元格视图)。我需要为第一个表视图(与核心数据的数组控制器连接的那个)的每一行添加一列作为复选框列,并且该列的标题应该具有存储在排列对象.header 中的值。但这不是它。这些新列应按特定顺序排列:升序,基于第一个表中的arrangedobjects.order 值。

这应该在我点击界面上的更新按钮时执行。

所以问题是:

-如何根据第一个表视图的行数向第二个表视图添加列?

-如何根据第一个表视图中存储在列中的值对列进行排序?

-如何以编程方式将列设置为复选框列?

-如何以编程方式将列标题设置为存储在数组控制器中的值?

所需结果的示例:

表 1(连接到核心数据)

 somecolumn | header | order | somecolumn | somecolumn
 ------------------------------------------------------
 text        hd1       3       text         text
 text        hd3       1       text         text
 text        hd4       7       text         text

表 2 的结构:(除第一列之外的所有复选框列,列顺序基于表 1 的“顺序”字段,列标题基于表 1 的“标题”字段)

 existingcolumn | hd3 | hd1 | hd4

再次,请尽可能清楚。

谢谢你

最好的祝福

伊戈尔

我过去已经提出过类似的问题,但是这个问题的内容要多得多,这就是我开始新问题的原因。我在网上搜索并没有找到这个特定问题的答案。还请记住,我是 Objective-c/cocoa 编程的新手,所以请在你的答案中明确。

4

1 回答 1

1

-如何根据第一个表视图的行数向第二个表视图添加列?

创建动态列。您可以使用[tableView addTableColumn];内部循环进行 rows.count

-如何根据第一个表视图中存储在列中的值对列进行排序?

Order 的意思是……OrderBy?已排序,您永远不会对 tableview 进行排序,而是对模型数组进行排序。对数组进行排序并填充表格。

-如何以编程方式将列设置为复选框列?

对于复选框实现,请在此处找到一个项目

在您想要复选框的列中绘制一个 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]; 
}

-如何以编程方式将列标题设置为存储在数组控制器中的值?

使用这一类,或者可以使用一行语句:

@interface NSTableColumn(SetTitle)

- (void)setTitle:(NSString *)inTitle
{
    [[self headerCell] setStringValue:inTitle] ;
    [[[self tableView] headerView] setNeedsDisplay:YES];
}

@end

编辑:

以编程方式复选框:

- (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];
}
于 2013-01-29T14:19:51.870 回答