排序NSTableView

upe*_*der 7 sorting cocoa nstableview

我在NSTableView中有两个coloumn作为Name和Salary,有5-10个值.我想在点击两列的标题后对这些coloumn进行排序.互联网上存在大量数据,但我无法使用这些数据.请帮我在可可做这个.

在此先感谢,并感谢任何帮助.

rou*_*nak 16

每个表列都有一个方法setSortDescriptorPrototype 排序描述符是告诉数组如何对自身进行排序的方法(升序,降序,忽略大小写等).迭代您想要的每个列可排序并在每个列上调用此方法,并传递所需的排序描述符(在我的情况下,我将使用列标识符)

for (NSTableColumn *tableColumn in tableView.tableColumns ) {

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)];
    [tableColumn setSortDescriptorPrototype:sortDescriptor];
}
Run Code Online (Sandbox Code Playgroud)

编写这段初始化代码后,NSTableViewDataSource有一个方法- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors可以在更改排序描述符时通知您,在委托中实现此方法并向数据数组发送消息以对自身进行排序

- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
    self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors];
    [aTableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

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


Tos*_*nde 7

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

好的,你需要这样做:

  1. 选择要在表中排序的实际列.
  2. 在Attributes Inspector中,您需要填写两个字段:Sort Key和Selector.
  3. 在"排序键"字段中,您需要输入标识符的值.您的标识符的值位于Identity Inspector中.
  4. 在"选择器"字段中,您需要根据列中的对象类型输入合适的选择器方法.默认方法是; 相比:

基于Table View Programming Guide for 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];
}
Run Code Online (Sandbox Code Playgroud)