我正在使用表格视图,因为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];
}
答案 0 :(得分:1)
我解决了这个问题。我刚刚根据字典的数据类型添加了条件排序描述符方法。并在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];
}