通过副标题对tableview单元格进行排序

时间:2012-01-11 14:58:49

标签: iphone objective-c cocoa-touch uitableview mapkit

我得到2分这样的距离

[userLocation distanceFromLocation: annotationLocation] / 1000;

并将其设置为tableview的副标题,如下图所示 screenshot http://i41.tinypic.com/ruxv74.png

问题是,我可以按距离(副标题)订购此表吗?

谢谢!

抱歉英语不好= x

4 个答案:

答案 0 :(得分:6)

您可以按照任何方式订购UITableView的单元格,但是在创建表格的数据源之前必须先显示它们。如果使用NSFetchResultsController,则可以将距离作为排序描述符。如果您使用的是简单的NS(Mutable)数组,请在将其作为表的源之前对其进行排序。

像克里斯说的那样,你可以用

来做
NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"annotationLocation" ascending:YES];

如果你正在使用的是NSArray,那么:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];

如果它是NSFetchResultsController:

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:titleSorter, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

答案 1 :(得分:1)

创建一个NSSortDescriptor来对行进行排序:

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"annotationLocation" ascending:YES];
[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];

答案 2 :(得分:0)

制作具有这些距离的数组,按照您想要的顺序排列

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"cellIdentifier";
    UITableViewCell *_cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (_cell == nil) {
        _cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease];
    }
    _cell.textLabel.text = @"Transcripts";
    _cell.detailTextLabel.text = [yourArray objectAtIndex:indexPath.row];
    return _cell;
}
好吧,这样的事情应该可以解决问题。

希望有所帮助

答案 3 :(得分:0)

假设您有某些对象持有坐标并将对象放入数组位置,您可以通过执行以下操作来使用比较器块:

locations = [locations sortedArrayUsingComparator: ^(id a, id b) {

    CLLocationDistance dist_a= [[a objectsForKey:@"coordinate"] distanceFromLocation: userPosition];
    CLLocationDistance dist_b= [[b objectsForKey:@"coordinate"] distanceFromLocation: userPosition];
    if ( dist_a < dist_b ) {
        return (NSComparisonResult)NSOrderedAscending;
    } else if ( dist_a > dist_b) {
        return (NSComparisonResult)NSOrderedDescending;
    } else {
        return (NSComparisonResult)NSOrderedSame;
    }
}

每次显示tableView时,都会将此代码添加到viewWillAppear:以获取更新的位置。