从 tableView:objectValueForTableColumn:row 到 return 的内容:?

What to return from tableView:objectValueForTableColumn:row:?

Cocoa OSX 编程新手。来自 iOS 编程。看起来 NSTableView 编程类似于 UITableView 编程。所以我正在尝试实现 NSTableViewDataSource 协议的一部分,但我不知道 tableView:objectValueForTableColumn:row:method 中的 return 是什么,以便在行和列上显示一个简单的字符串。我用谷歌搜索,浏览了 Apple 文档,但找不到任何东西。方法 return 类型 "id" 所以这没有帮助。谢谢

如果你想显示一个字符串,return一个NSString*例如:

- (id)tableView:(NSTableView*)sender objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)rowIndex
{
return [NSString stringWithFormat:@"Row: %d , Col: %@", rowIndex, [tableColumn identifier]];
}

您 return 的对象值取决于 a) 什么对您的模型有意义,以及 b) 您如何设置 table 视图的单元格视图。

我假设您使用的是基于视图的 table 视图,因为您是新手,而且这是现代方式。因此,table 视图获取由 -tableView:objectValueForTableColumn:row: 编辑的对象值 return 并尝试在单元格视图上设置它。它检查单元格视图是否实现了 -setObjectValue:,如果是,则调用它并传递从数据源 returned 的对象值。

那么,什么样的视图支持 -setObjectValue: 以及它们在设置时如何处理它?好吧,任何继承自 NSControl 的视图都有这样的方法并显示,并且有可能让用户编辑该值。这种控件的一个常见示例是 NSTextField。因此,如果您的单元格视图是 NSTextField 或其他控件,您的数据源可以 return 和 NSString 就足够了。

如果控件有格式化程序对象(NSFormatter 的子class 的实例),您的数据源可以return 一些其他类型的对象,例如 NSNumberNSDate,格式化程序会将其与文本相互转换。

如果您的单元格视图是 NSTableCellView,那么 class 也会响应 -setObjectValue:。因此 table 视图将使用从数据源中编辑的对象值 return 调用它。但是,NSTableCellView 本身并不会 对象值的任何事情。它只是持有它。然后你可以做的是让子视图通过 objectValue 属性 绑定到它。他们将通过绑定获得他们的价值。在那种情况下,数据源可以 return 任意对象。子视图将 select 对象的特定属性通过 select 为绑定设置适当的键路径来显示和编辑。例如,如果您的应用程序操作 Employee 对象,您的数据源可以 return 行的 EmployeeNSTableCellView 将保存对它的引用,以及一个文本字段在单元格视图中可以绑定到 NSTableCellView,键路径为 objectValue.name,以显示员工姓名。 (您可以使用绑定选项(如值转换器或控件上的格式化程序)进一步控制从对象属性到显示值的转换。)