下面代码中的 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];
}
}
最佳答案
我不确定为什么您的第一个解决方案不起作用 - 也许您没有连接您的代表?请注意,数据源和委托(delegate)是两个独立的事物。
您在答案中实现的方法(即数据源)不是执行此操作的正确位置。数据源,特别是 numberOfRowsInTableView:
和 tableView:objectValueForTableColumn:row:
,应该仅返回所呈现的内容,而不是创建 View /单元格对象。
我建议您在 xib 中创建并配置 NSButtonCell(如果您有 NSButtonCell),或者在创建表格 View 及其列的同一位置创建和配置 NSButtonCell,这也是设置每列单元格的正确位置。
关于objective-c - NSButtonCell NSSwitchButton 不显示复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599502/