1

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

4

3 回答 3

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

希望这可以帮助!

于 2011-08-31T10:23:07.700 回答
1

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

要对数组进行排序,您可以尝试上面的 Bryan 方法。在你得到排序数组调用之后

  [TheTableView reloadData];
于 2011-08-31T10:29:12.313 回答
0

我有多个 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;
    }
}
于 2016-01-28T16:31:38.133 回答