我得到2分这样的距离
[userLocation distanceFromLocation: annotationLocation] / 1000;
并将其设置为tableview的副标题,如下图所示 screenshot http://i41.tinypic.com/ruxv74.png
问题是,我可以按距离(副标题)订购此表吗?
谢谢!
抱歉英语不好= x
答案 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:
以获取更新的位置。