首先,我搜索了3天,但没有找到我要找的东西。
第二点,我是一个非常初学的xcode编程,所以请尽量保持你的答案简单/或详细!
我有以下情况:
我在xcode中有一个tableview,需要第一列是文本,然后X列是复选框列,最后一列是文本。 X列是一个变量,我读取了一个sqlite文件,并根据这些条目为每个条目创建一个列。然后将在稍后的所有行添加。
我的问题是,我如何在运行时定义什么类型和我有多少列? 我怎么知道复选框的值(如果选中或不选中) 如果我不知道它有多少个单元格,我如何向tableview添加行?
感谢您抽出宝贵的时间!
最好的问候
伊戈尔
答案 0 :(得分:6)
你想在运行时创建一个表,你不知道有多少列!
这很重要。
阅读NSTableView
文档,您会发现addTableColumn:
方法。在循环中继续创建colmn并且不要忘记将标识符提供给所有列。
在此,你想拥有一个复选框。创建复选框也不困难。
编辑:
对于复选框实施,请在此处找到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];
}
检查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];
}