我正在制作这个程序,它有一个 NSTableView 有四列,其中两列是复选框。我现在只是想让一个工作,但我被卡住了。
首先,这是我的相关代码:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {
NSString *filePathThree = [[NSBundle mainBundle] pathForResource:@"mydictionary" ofType:@"plist"];
NSData *myDataThree = [[NSData alloc]initWithContentsOfFile:filePathThree];
self.flozzCodeAndName = (NSMutableDictionary *)[NSPropertyListSerialization
propertyListFromData:myDataThree
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:NULL
errorDescription:NULL];
return [[flozzCodeAndName objectForKey:@"name"] count];
}
- (void)tableView:(NSTableView *)tableView
setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex
{
NSButtonCell *cell;
cell = [[NSButtonCell alloc] init];
[cell setButtonType:NSSwitchButton];
[cell setTitle:@""];
[cell setTag:rowIndex];
NSLog(@"%d", [cell tag]);
[cell setCellAttribute:NSCellEditable to:3];
[cell setImagePosition:NSImageOnly];
[cell setState:NSOnState];
NSLog(@"%d", [cell state]);
[havzColumn setDataCell:cell];
[myTableVeew reloadData];
[cell release];
}
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
NSString *filePathThree = [[NSBundle mainBundle] pathForResource:@"mydictionary" ofType:@"plist"];
NSData *myDataThree = [[NSData alloc]initWithContentsOfFile:filePathThree];
self.flozzCodeAndName = (NSMutableDictionary *)[NSPropertyListSerialization
propertyListFromData:myDataThree
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:NULL
errorDescription:NULL];
NSArray *myArray = [flozzCodeAndName objectForKey:[aTableColumn identifier]];
NSString *myStringValue = [myArray objectAtIndex:rowIndex];
return myStringValue;
}
如您所见,我使用的是该表的数据源方法,而不是绑定。我为 Cocoa 阅读的书制作了一些带有标签的复选框,但我认为它们位于数组中,因此这可能不是最好的做法。
无论如何,当我运行它时,调试器将向我显示标签(等于行)以及按钮的状态(由于 NSOnState,所有这些都为 1)。我的问题是我无法根据它们的状态来选中和取消选中这些框。我读了这个问题:表格列上的复选框不会注册点击
然后是 NSTableView 数据源参考。根据链接问题中的 Nozzi 先生,在我看来,需要一个包含盒子状态的数组,所以我尝试了,将其设置[cell state]
为 NSNumber 以将其放入 NSMutableArray。我 FUBAR'd 那和不认为那是正确的。此表中有 454 行(标记转到 453,因为数组从 0 开始),用于所有四列。
我还想知道是否应该将 tableview:setObjectValue: 中的单元格定义内容放入“awakeFromNib”中。我确实在 IB 中放置了一个复选框按钮单元格,但我之前遇到了问题,所以我决定也以编程方式进行。在所有这些过程中,我确实并且仍然[myTableVeew reloadData]
在 setObjectValue 方法中有一个。
感谢您的帮助,如果需要任何其他信息,我可以得到它。