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
显示一个显示排序顺序的漂亮小三角形.
我在寻找实现类似功能的最简单方法的同时偶然发现了这个问题.虽然原来的问题很老,但我希望有人觉得我的答案很有用!请注意我使用的是Xcode 5.1.1
好的,你需要这样做:
基于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)
归档时间: |
|
查看次数: |
7919 次 |
最近记录: |