首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序NSTableView

排序NSTableView
EN

Stack Overflow用户
提问于 2012-06-19 14:47:34
回答 4查看 9.2K关注 0票数 9

我在NSTableView中有两列作为名称和薪水,值为5-10。我想在单击这两列的标题后对这些列进行排序。互联网上有很多数据,但我不能使用这些数据。请帮我用可可做这件事。

提前感谢并感谢任何帮助。

EN

回答 4

Stack Overflow用户

发布于 2012-06-29 16:35:15

每个表列都有一个方法,setSortDescriptorPrototype排序描述符用来告诉数组如何对自身进行排序(升序、降序、忽略大小写等)。迭代您希望成为可排序的每一列,并对每一列调用此方法,并传递所需的排序描述符(在我的示例中,我将使用列标识符)

代码语言:javascript
复制
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方法,只要排序描述符发生更改就会通知您,在数据源中实现此方法并向数据数组发送一条消息以进行自身排序

代码语言:javascript
复制
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
    self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors];
    [aTableView reloadData];
}

此方法将在每次单击列标题时触发,并且NSTableColumn会显示一个漂亮的小三角形,显示排序顺序。

票数 17
EN

Stack Overflow用户

发布于 2014-06-05 20:41:55

在寻找实现类似功能的最简单方法时,我偶然发现了这个问题。虽然原来的问题很老,但我希望有人能发现我的答案是有用的!请注意,我使用的是Xcode 5.1.1

好的,要这样做,你需要:

  1. 选择要在表中排序的实际列。
  2. 在属性检查器中,您需要填写两个字段:排序关键字和选择器。
  3. 在排序关键字字段中,您需要输入标识符的值。标识符的值位于身份检查器中。
  4. 在选择器字段中,需要根据列中的对象类型输入合适的选择器方法。默认方法是;比较:

基于Mac的表视图编程指南。compare:方法适用于NSString、NSDate和NSNumber对象。如果您的表列只包含字符串,如果区分大小写并不重要,则可能需要考虑使用caseInsensitiveCompare:方法。但是,考虑将这些方法签名替换为localizedCompare:或localizedCaseInsensitiveCompare:方法,以考虑用户的语言要求。

最后,您需要在Table View Controller中声明tableView:sortDescriptorsDidChange:方法,格式如下:

代码语言:javascript
复制
-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
    [listArray sortUsingDescriptors: [mtableView sortDescriptors]];
    [tableView reloadData];
}
票数 7
EN

Stack Overflow用户

发布于 2020-08-28 16:46:27

只是最近有了同样的问题来解决tableView。我的方法是:

将您的属性绑定到tableview的arrayController

  • bind sortDescriptors tableview's sortDescriptors to Arraycontroller's sort descriptor

  • perform
  • sortDescriptors in attribute inspector (参见上面的Tosin答案)

对我来说太完美了。不需要为列或其他东西设置原型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11095737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档