使用自定义对象对UITableView进行排序

时间:2014-11-18 13:02:47

标签: ios objective-c uitableview sorting

我有一个自定义UITableView,它实现了委托方法和数据源 方法。我会知道"年龄"我的自定义对象的属性。

我需要在哪里实施排序?我怎么排序?

我的排序看起来像这样:

- (void)sortPersonByAge{
 for(int i = 0; i < personArray.count(); i++){
   for (int j = i+1; j < personArray.count(); j++){
       Person * pJ = [personArray objectAtIndex:i];
       Person * pI = [personArray objectAtIndex:j];
       Person * pD; //Dummy

       if (pi.Age > pj.Age){
          [personArray exchangeObjectAtIndex:i withObjectAtIndex:j];
       }
    }
  }
}

排序也不是100%正常工作。

2 个答案:

答案 0 :(得分:-1)

您应该在Person类中实现compare:方法,然后在包含数据的数组上调用此方法:

NSArray * sortedPersonArray = [personArray sortedArrayUsingSelector:@selector(compare:)];

关于compare:实施:

- (NSComparisonResult)compare:(Person *)person{
    if (self.Age > person.Age) {
        return NSOrderedDescending;
    }else if(self.Age < person.Age){
        return NSOrderedAscending;
    }else{
        return NSOrderedSame;
    }
}

答案 1 :(得分:-1)

或者您可以这样排序:

NSArray *sortedArray;
sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *first = [(Person*)a birthDate];
    NSDate *second = [(Person*)b birthDate];
    return [first compare:second];
}];

或者像这样:

[self.array sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]];

您可以在表格中使用此数组:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];
    Object *object = [self.sortedArray objectAtIndex:indexPath.row];
    cell.textLabel.text = object.name;
    return cell;
}