我正在开发一个iPad应用程序,它有一个自定义单元格的桌面视图。 每个单元格都是一个对象,它表示3列中类的属性。 我想根据列对数据进行排序。如何使用目标c实现它?
答案 0 :(得分:2)
您可以使用NSSortDescriptor完成此任务。
准备需要排序的数组
NSArray *objects = [[NSArray alloc] initWithObjects:obj1, obj2, obj3, nil];
使用NSSortDescriptors创建一个数组,在本例中我使用1.对于DescriptorKey,从Cell中获取您希望排序的属性。
NSArray *descriptor = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];
然后实例化一个新数组并从初始数组上的NSArray调用sortedArrayUsingDescriptors实例方法,返回一个具有相同对象的已排序数组。
NSArray *sortedArray = [objects sortedArrayUsingDescriptors:descriptor];
希望这有帮助!
答案 1 :(得分:1)
据我了解,UITableView中没有“列”。人们将格式良好的子视图放在TableViewCell中,使表格看起来像列。
对于Array的排序,您可以尝试上面的Bryan方法。获得排序的数组调用后
[TheTableView reloadData];
答案 2 :(得分:0)
我有多个NSMutableArrays和许多自定义单元格的类似情况。我不得不根据不同的列对它们进行排序,我搜遍了所有,无法找到解决方案。 所以这是我的:
从列上的UIButton,我发送两个参数(sortwith和ascending / descending),并将每个“ROW”的所有内容保存到字典中。
-(void)sortTheArray :(NSString *)sortWith :(BOOL)isAsc
{
sortedArray = [[NSMutableArray alloc]init];
NSDictionary *dict;
for (int i =0; i< orderArr.count; i++) {
dict = [NSDictionary dictionaryWithObjectsAndKeys:[addressArr objectAtIndex:i], @"names", [zipArr objectAtIndex:i], @"zip", [orderArr objectAtIndex:i], @"orderNo", [cityArr objectAtIndex:i], @"city", nil];
[sortedArray addObject:dict];
// NSLog(@"Sorted Array: %@", [sortedArray objectAtIndex:i]);
}
现在根据点击的列,我使用排序描述符对我们刚刚创建的字典进行排序。
NSSortDescriptor *sortDescript = [[NSSortDescriptor alloc]initWithKey:sortWith ascending:isAsc];
NSArray *descriptors = [NSArray arrayWithObject:sortDescript];
NSArray *newSortedArray = [sortedArray sortedArrayUsingDescriptors:descriptors];
我重新初始化现有的Mutable数组,使它们为零。
orderArr = [[NSMutableArray alloc]init];
zipArr = [[NSMutableArray alloc]init];
addressArr = [[NSMutableArray alloc]init];
cityArr = [[NSMutableArray alloc]init];
这里我开始将已排序数组的内容添加回旧的NSMutableArrays并重新加载表。
for (int i = 0; i<newSortedArray.count; i++) {
// NSLog(@"New Sorted Array is : %@", [newSortedArray objectAtIndex:i]);
orderArr = [newSortedArray valueForKey:@"orderNo"];
zipArr = [newSortedArray valueForKey:@"zip"];
addressArr = [newSortedArray valueForKey:@"names"];
cityArr = [newSortedArray valueForKey:@"city"];
}
[self.tableObject reloadData];
}
如果你需要它,我的UIButton看起来像这样:
- (IBAction)sortWithOrderNo:(id)sender;
{
if (isAscending == YES) {
[self sortTheArray:@"orderNo":YES];
isAscending = NO;
}
else
{
[self sortTheArray:@"orderNo":NO];
isAscending = YES;
}
}