NSTableView 如何通过代码设置内容模式(基于视图或基于单元格)?

2024-05-05

如题。 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 对象,则需要此方法。单元格和视图不能在同一表视图中混合。

这暗示它是确定表视图是基于单元格还是基于视图的条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSTableView 如何通过代码设置内容模式(基于视图或基于单元格)? 的相关文章

随机推荐