我在NSTableView中有两列作为名称和薪水,值为5-10。我想在单击这两列的标题后对这些列进行排序。互联网上有很多数据,但我不能使用这些数据。请帮我用可可做这件事。
提前感谢并感谢任何帮助。
发布于 2012-06-29 16:35:15
每个表列都有一个方法,setSortDescriptorPrototype排序描述符用来告诉数组如何对自身进行排序(升序、降序、忽略大小写等)。迭代您希望成为可排序的每一列,并对每一列调用此方法,并传递所需的排序描述符(在我的示例中,我将使用列标识符)
for (NSTableColumn *tableColumn in tableView.tableColumns ) {
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)];
[tableColumn setSortDescriptorPrototype:sortDescriptor];
}在编写了这段初始化代码之后,NSTableViewDataSource有一个- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors方法,只要排序描述符发生更改就会通知您,在数据源中实现此方法并向数据数组发送一条消息以进行自身排序
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors];
[aTableView reloadData];
}此方法将在每次单击列标题时触发,并且NSTableColumn会显示一个漂亮的小三角形,显示排序顺序。
发布于 2014-06-05 20:41:55
在寻找实现类似功能的最简单方法时,我偶然发现了这个问题。虽然原来的问题很老,但我希望有人能发现我的答案是有用的!请注意,我使用的是Xcode 5.1.1
好的,要这样做,你需要:
基于Mac的表视图编程指南。compare:方法适用于NSString、NSDate和NSNumber对象。如果您的表列只包含字符串,如果区分大小写并不重要,则可能需要考虑使用caseInsensitiveCompare:方法。但是,考虑将这些方法签名替换为localizedCompare:或localizedCaseInsensitiveCompare:方法,以考虑用户的语言要求。
最后,您需要在Table View Controller中声明tableView:sortDescriptorsDidChange:方法,格式如下:
-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
[listArray sortUsingDescriptors: [mtableView sortDescriptors]];
[tableView reloadData];
}发布于 2020-08-28 16:46:27
只是最近有了同样的问题来解决tableView。我的方法是:
将您的属性绑定到tableview的arrayController
对我来说太完美了。不需要为列或其他东西设置原型。
https://stackoverflow.com/questions/11095737
复制相似问题