如题。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 对象,则需要此方法。单元格和视图不能在同一个表格视图中混合使用。
这暗示它是确定表格视图是基于单元格还是基于视图的条件。