作为标题。如何通过代码设置NSTableView的内容模式(基于视图或基于单元格)?
感谢您的帮助。
感谢您的帮助。
NSTableView
默认为基于单元格的,这对于向后兼容性是有意义的。当表视图委托实现 -tableView:viewForTableColumn:row:
时,表视图将变为基于视图的。您可以通过编程方式创建表视图来轻松测试,如下所示:
@implementation BAVAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *contentView = self.window.contentView;
NSTableView *tableView = [[NSTableView alloc] initWithFrame:(NSRect){{50, NSMaxY(contentView.frame) - 200}, {400, 200}}];
tableView.dataSource = self;
tableView.delegate = self;
[contentView addSubview:tableView];
NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column"];
column.width = 400;
[tableView addTableColumn:column];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 3;
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
return [NSString stringWithFormat:@"%ld", row];
}
//- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// NSTextField *textField = [[NSTextField alloc] initWithFrame:(NSRect){.size = {100, 15}}];
// textField.stringValue = [NSString stringWithFormat:@"%ld", row];
// return textField;
//}
@end
如果您取消注释该委托方法,您将获得一个基于视图的表格视图:
-tableView:viewForTableColumn:row:
的文档说明如下:
如果您希望在表视图中使用 NSView 对象而不是 NSCell 对象,则需要使用此方法。单元格和视图不能混合在同一个表视图中。
这暗示了它是确定表视图是基于单元格还是基于视图的条件。
-applicationDidFinishLaunching
中看到的添加 NSTableColumn
的部分!我曾经好几次都错过了这部分答案。 - wagglesNSTableViewCell
,则不能使用 NSTableView.makeView(withIdentifier:owner:);请参阅此讨论以了解原因和解决方案。 - Jamie Birch