我正在开发一个 iPad 应用程序,它有一个带有自定义单元格的表格视图。每个单元格都是一个对象,它在 3 列中表示类的属性。我想根据列对数据进行排序。如何使用目标 c 实现它?
3 回答
您可以使用 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];
希望这可以帮助!
据我了解,UITableView 中没有“列”。人们将格式良好的子视图放在 TableViewCell 中,以使表格看起来像有列。
要对数组进行排序,您可以尝试上面的 Bryan 方法。在你得到排序数组调用之后
[TheTableView reloadData];
我有多个 NSMutableArrays 和许多自定义单元格的类似情况。我不得不根据不同的列对它们进行排序,我到处搜索,找不到解决方案。所以这是我的:
从列上的 UIButton,我发送两个参数(排序和升序/降序),并将每个“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];
我重新初始化现有的可变数组,使它们为零。
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;
}
}