2011-08-31 42 views
0

Iam开发iPad应用程序,它具有自定义单元格的tableview。 每个单元格都是一个表示3列中类的属性的对象。 我想根据列对数据进行排序。我如何使用目标c实现它?对桌面视图中的对象排序

回答

2

您可以使用NSSortDescriptor来完成这项工作。

准备需要排序

NSArray *objects = [[NSArray alloc] initWithObjects:obj1, obj2, obj3, nil]; 

创建NSSortDescriptors阵列阵列,在这个例子中我使用1.对于DescriptorKey,采取从小区A属性上您希望的排序为基于根据。

NSArray *descriptor = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]]; 

然后实例化一个新的数组,并从NSArray中调用sortedArrayUsingDescriptors实例方法,你最初的阵列上,返回与同一对象排序后的数组。

NSArray *sortedArray = [objects sortedArrayUsingDescriptors:descriptor]; 

希望这有助于!

+0

嘿感谢。它运行良好 – Tinku

1

为了我的理解,UITableView中没有“列”。人们在TableViewCell中放置格式良好的子视图,使表格看起来像有列。

对于Array的排序,你可以尝试上面的Bryan的方法。在你得到排序后的数组调用

[TheTableView reloadData]; 
+0

如果排序在tableView单元格创建之前发生,则不需要调用'reloadData'。 – Craimasjien

0

我有一个类似的情况,多个NSMutableArrays和许多自定义单元格。我不得不根据各种栏目对它们进行排序,并且我全面搜索并找不到解决方案。 所以这里是我的:

从列上的UIButton,我发送两个参数(sortwith和升序/降序),并将每个“行”的所有内容保存到字典中。

-(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]; 

我重新初始化现有的可变数组,使它们为零。

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; 
    } 
}