情况:
有两个表,一个主表和一个辅助表。主表连接到核心数据数据库。 我已经设置了核心数据和主表,就像我想要的那样......一切正常,我很高兴。
现在我必须将列添加到第二个表中。 基本上第二个tableview有一个列(图像和文本表格单元格视图)。我需要为第一个tableview的每一行(与核心数据的数组控制器连接的一行)添加一列作为复选框列,此列的标题应该具有存储在arrangeobjects.header中的值。但这不是它。这些新列应按特定顺序排序:升序,基于第一个表中的arrangeobjects.order值。
只要我点击界面上的更新按钮,就应该执行此操作。所以问题是:
- 我可以根据第一个tableview的行数向第二个表视图添加列吗?
- 我可以根据第一个tableview的列中存储的值来订购列吗?
- 如何以编程方式将列设置为checkboxcolumn?
- 如何以编程方式将列标题设置为存储在arraycontroller中的值?
所需结果的示例:
表1(连接到核心数据)
somecolumn | header | order | somecolumn | somecolumn
------------------------------------------------------
text hd1 3 text text
text hd3 1 text text
text hd4 7 text text
表2的结构:(除了基于表1的“order”字段的第一个,列顺序之外的所有复选框列,基于表1的“标题”字段的列标题)
existingcolumn | hd3 | hd1 | hd4
再次,请尽可能清楚。
谢谢
祝你好运
伊戈尔
我过去已经提出了类似的问题,但是这个问题有更多内容,这就是我开始新问题的原因。我搜索了网络,但没有找到这个具体问题的答案。另外请记住,我是objective-c / cocoa编程的新手,所以请在答案中说清楚。
答案 0 :(得分:1)
- 我可以根据第一个表格视图的行数向第二个表格视图添加列吗?
创建动态列。您可以在rows.count
中使用[tableView addTableColumn];
内部循环
- 我可以根据第一个tableview中列中存储的值来订购列吗?
订单意味着...... OrderBy?排序,您从不对表视图排序,您对模型数组进行排序。对数组进行排序并填充表格。
- 如何以编程方式将列设置为checkboxcolumn?
对于复选框实施,请在此处找到project。
在要复选的列中绘制一个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];
}
检查具有值“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;
}
按照开/关更新复选框的值。
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {
[states replaceObjectAtIndex:row withObject:value];
[tableView reloadData];
}
- 如何以编程方式将列标题设置为存储在arraycontroller中的值?
使用此类别,或者可以使用一行语句:
@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];
}