我使用的表格视图看起来像excel工作表类型可以说多列。在Excel表格中,在栏标题上添加平移手势以增加栏的宽度。我在对列数据进行排序时遇到问题。列数据始终按字母/字符串格式排序。而我有一些数字类型列以及日期类型。因此,所有列均按字符串排序。您能否建议一些选择来实现这一目标。我将所有数据作为Web服务的字典放置在数组中。
让我分享一些代码进行排序。
-(void)sortTableDataUsingSortKey:(NSString *)sortKey withAscending:(BOOL)isAscending {
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:isAscending selector:@selector(compare:)];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSArray *arrTemp = [[NSArray alloc] initWithArray:[data_array sortedArrayUsingDescriptors:sortDescriptors]];
[data_array count]?[data_array removeAllObjects]:NSLog(@"Datsource Table Not null");
[data_array addObjectsFromArray:arrTemp];
arrTemp = nil;
[_table_view reloadData];
}
我解决了这个问题。我只是根据字典的数据类型添加了条件排序描述符方法。在要添加数据的Data_array字典中,以适当的数据类型添加数据。例如,如果数据是数字,则将其作为数字/浮点数或NSDate添加到字典中。
现在,我按照排序列检查字典中的数据类型。并更改排序选择器(比较非字符串数据和使用caseInsensitiveCompare的字符串数据:),其余工作正常。
现在可行的最终方法是..
-(void)sortTableDataUsingSortKey:(NSString *)sortKey withAscending:(BOOL)isAscending {
NSSortDescriptor *sortDescriptor = nil;
if ([data_array count] && [[[data_array objectAtIndex:0] valueForKey:sortKey] isKindOfClass:[NSString class]]) {
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:isAscending selector:@selector(caseInsensitiveCompare:)];
}
else {
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:isAscending selector:@selector(compare:)];
}
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSArray *arrTemp = [[NSArray alloc] initWithArray:[data_array sortedArrayUsingDescriptors:sortDescriptors]];
[data_array count]?[data_array removeAllObjects]:NSLog(@"Datsource Table Not null");
[data_array addObjectsFromArray:arrTemp];
arrTemp = nil;
[_table_view reloadData];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句