从tableView返回什么:objectValueForTableColumn:row:?

时间:2015-04-19 00:23:03

标签: objective-c macos cocoa nstableview

OSX上的Cocoa编程新手。来自iOS编程。看起来NSTableView编程类似于UITableView编程。所以我试图实现NSTableViewDataSource协议的一部分,但我不知道从tableView:objectValueForTableColumn:row:方法返回什么,以便获得一个简单的字符串显示在行和列上。我用谷歌搜索,浏览Apple文档,找不到任何东西。该方法返回类型“id”,因此没有帮助。感谢。

2 个答案:

答案 0 :(得分:6)

您返回的对象值取决于a)对您的模型有意义的内容,以及b)如何设置表视图的单元格视图。

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

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

如果控件具有格式化程序对象(NSFormatter的子类的实例),则您的数据源可能会返回其他类型的对象,例如NSNumberNSDate,以及格式化程序会将其转换为文本。

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

答案 1 :(得分:0)

如果要显示字符串,请返回NSString *,例如:

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