这很简单真的,一旦你了解它访问阵列(当然!)。您不能直接将NSArray用作表格源。您需要创建一个自定义对象来实现NSTableViewDataSource或在某个现有类中实现该协议 - 通常是一个控制器。如果您使用Xcode创建基于标准文档的应用程序,那么文档控制器类(它将被称为MyDocument)是一个很好的类。
您需要实现至少这两种方法:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
如果你有一个可变的数组,其值你想在一个表视图中使用与一列,类似下面应该做的开始:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
它刚刚发生,我认为你可以在上面两种方法添加为一个类别的NSArray更换myMutableArray
与self
,然后你可以使用数组作为数据源。
反正有可变数组,重要的是你改变它任何时候,你需要让表视图知道它已经改变了,所以你需要发送的表视图-reloadData
。
如果你的表视图有多个列,你想用你的数组中的对象的属性来填充它,有一个窍门,你可以做,使之更容易为自己。比方说,你的数组中的对象是定义了一个名为人用两种方法的类的实例:
-(NSString*) givenName;
-(NSString*) familyName;
,你希望你的表视图,以对每个那些一列,可以设置每列的identifier
财产对财产的人的名称该列显示和使用类似以下内容:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
如果用valueForKeyPath:
替换valueForKey:
和您的Person类也有以下方法:
-(Person*) mother;
-(Person*) father;
-(NSString*) fullName; // concatenation of given name and family name
您可以添加具有以下标识符的表格列:father.fullName
或mother.familyName
,这些值将自动填充。
此链接不工作!请更新它! – elin3t 2015-04-17 18:36:36