Сортировка TableView по местоположению? - PullRequest
0 голосов
/ 06 января 2012

Я хочу отсортировать ячейки таблицы по ближайшему местоположению пользователя. Допустим, у меня 14 магазинов, и я хочу отсортировать их по местоположению. Есть ли какой-нибудь пример, чтобы сделать что-то подобное?

Спасибо!


Да, У меня есть табличное представление с 14 ячейками, и я поместил названия 14 хранилищ из списка в этих ячейках с управлением навигацией к другим представлениям с деталями (тоже из списка). 14 магазинов по всей стране, и я хочу отсортировать их по месту в соответствии с моим местоположением в стране (с помощником GPS, конечно) Я хочу, чтобы ближайший магазин был наверху стола.

Это мой код сортировки, который мне нужно использовать, но я не могу понять, как и где его интегрировать с таблицей. Для всех, кому это нужно - не стесняйтесь использовать этот код :) .. многим нужно это:

- (NSComparisonResult)compareDistance:(id)obj 
{
    CLLocation* loc = [[CLLocation alloc]initWithLatitude:32.066157 longitude:34.777821];

    StoreAnnotation* operand1 = self;
    StoreAnnotation* operand2 = obj;

    CLLocation* operand1Location = [[CLLocation alloc]initWithLatitude:operand1.coordinate.latitude longitude:operand1.coordinate.longitude];

    CLLocationDistance distanceOfLocFromOperand1 = [loc distanceFromLocation:operand1Location];
    NSLog(@"The distance of loc from op1 = %f meters", distanceOfLocFromOperand1);

    CLLocation* operand2Location = [[CLLocation alloc]initWithLatitude:operand2.coordinate.latitude longitude:operand2.coordinate.longitude];

    CLLocationDistance distanceOfLocFromOperand2 = [loc distanceFromLocation:operand2Location];
    NSLog(@"The distance of loc from op2 = %f meters", distanceOfLocFromOperand2);

    if (distanceOfLocFromOperand1 < distanceOfLocFromOperand2) 
    {
        return NSOrderedAscending;
    }

    else if (distanceOfLocFromOperand1 > distanceOfLocFromOperand2)
        return NSOrderedDescending;

    else return NSOrderedSame;

}

Было бы здорово, если бы кто-то мог помочь мне с этим .. Большое спасибо.

1 Ответ

0 голосов
/ 09 января 2012

ОК, поэтому я получил код, который выполняет работу с ячейками вместе с кодом сортировки ниже. Надеюсь, это поможет многим разработчикам, которые в этом нуждаются. Спасибо за попытку помочь:)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [arrayFromPlist count];
    NSLog(@"Array SIZE = %d",[arrayFromPlist count]);
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

}   
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    StoreAnnotation* tmpSt = [[Storage sharedStorage].sortedStoresArr objectAtIndex:indexPath.row];
    cell.textLabel.text = tmpSt.title;
    cell.textLabel.textColor = [UIColor whiteColor];
    double lat1=[lat doubleValue];
    double lon1=[lon doubleValue];
    CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:lat1 longitude:lon1];
    CLLocation *distForIndex = [[CLLocation alloc] initWithLatitude:tmpSt.coordinate.latitude longitude:tmpSt.coordinate.longitude];
    CLLocationDistance distance = [userLocation distanceFromLocation:distForIndex];
    NSLog(@"DISTANCE FOR CELL %d - %f",indexPath.row, distance);
    cell.detailTextLabel.text = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%0.1f kmh", distance/1000]];
    cell.detailTextLabel.textColor = [UIColor yellowColor];
    cell.imageView.image = [UIImage imageNamed:@"imageName.png"];
    UIView* backgroundView = [[ UIView alloc ] initWithFrame:CGRectZero];
    backgroundView.backgroundColor = [ UIColor blackColor ];
    cell.backgroundView = backgroundView;
    for ( UIView* view in cell.contentView.subviews ) 
    {
        view.backgroundColor = [ UIColor blackColor ];
    }

return cell;
}
...