gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:05:16 25 4
gpt4 key购买 nike

如标题。NSTableView如何通过代码设置内容模式(基于 View 或基于单元格)?

感谢您的帮助

最佳答案

NSTableView 默认是基于单元格的,这对于向后兼容是有意义的。当 TableView 委托(delegate)实现 -tableView:viewForTableColumn:row: 时, TableView 是基于 View 的。您可以通过以编程方式创建 TableView 来轻松进行测试,如下所示:

@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

如果您在注释掉该委托(delegate)方法的情况下运行此代码,您将获得一个基于单元格的表格 View :

enter image description here

如果您取消注释该委托(delegate)方法,您将获得一个基于 View 的表格 View :

enter image description here

-tableView:viewForTableColumn:row: 的文档指出

This method is required if you wish to use NSView objects instead of NSCell objects for the cells within a table view. Cells and views can not be mixed within the same table view.

这暗示它是确定 TableView 是基于单元格还是基于 View 的条件。

关于cocoa - NSTableView 如何通过代码设置内容模式(基于 View 或基于单元格)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19218807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com