小智 11
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
Run Code Online (Sandbox Code Playgroud)
如果您使用该委托方法注释掉运行此代码,您将获得基于单元格的表视图:

如果取消注释该委托方法,则会获得基于视图的表视图:

对于文件-tableView:viewForTableColumn:row:规定,
如果您希望在表视图中使用NSView对象而不是NSCell对象,则需要此方法.单元格和视图不能在同一个表视图中混合使用.
这暗示它是确定表视图是基于单元格还是基于视图的条件.
| 归档时间: |
|
| 查看次数: |
3548 次 |
| 最近记录: |