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