下面代码中的NSButtonCell工作正常,但点击时不显示检查图标。知道为什么吗?
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
if ([[tableColumn identifier] isEqualToString:@"select"]) {
NSButtonCell *cell = [[NSButtonCell alloc]init];
[cell setButtonType:NSSwitchButton];
[cell setTarget:self];
[cell setAction:@selector(checkboxChanged:)];
[cell setTitle:@""];
return cell;
} else {
NSCell *cell = [tableColumn dataCell];
return cell;
}
}以下是操作代码:
- (IBAction)checkboxChanged:(id)sender {
NSButtonCell *aCell = [[sender tableColumnWithIdentifier:@"select"]
dataCellForRow:[sender selectedRow]];
if ([aCell state] == NSOnState) {
NSLog(@"ON");
[aCell setState:NSOffState];
} else {
NSLog(@"OFF");
[aCell setState:NSOnState];
}
}发布于 2015-08-06 06:37:44
我不知道为什么你的第一个解决方案不起作用-也许你没有把你的代表联系起来?注意,数据源和委托是两个独立的东西。
在您的答案中实现的方法(它是一个数据源)并不适合这样做。数据源,特别是numberOfRowsInTableView:和tableView:objectValueForTableColumn:row:,应该只返回所呈现的内容,而不是创建视图/单元对象。
我建议在xib中创建和配置NSButtonCell (如果有xib),或者在创建表视图及其列的相同位置--这也是设置每个列的单元格的正确位置。
发布于 2015-07-24 18:40:57
我将上述代码从NSOutlineView delegate方法outlineView: dataCellForTableColumn:item:更改为delegate方法outlineView: objectValueForTableColumn: byItem:,从而解决了这个问题。
就像这样:
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
if ([[tableColumn identifier] isEqualToString:@"select"]) {
NSButtonCell* cell = [tableColumn dataCell];
[cell setSelectable:YES];
[cell setEnabled:YES];
[cell setTransparent:NO];
[cell setButtonType:NSSwitchButton];
[cell setTarget:self];
[cell setAction:@selector(checkboxChanged:)];
[cell setTitle:@""];
return cell;
}
return nil;
}现在它工作得很好。
https://stackoverflow.com/questions/31599502
复制相似问题