2014-12-08 3 views
0

Я использую пользовательскую ячейку UITableview, чтобы отображать расстояние между моим текущим местоположением и несколькими случайными местами в мире. Если мое текущее местоположение - город Нью-Йорк, то расстояние между моим текущим местоположением и Индией составляет где-то около 4000 миль &. Расстояние между моим текущим местоположением до Лондона составит 2000 миль и т. Д. Теперь я хочу использовать слайдер в моем представлении таблицы, чтобы определить место в указанном диапазоне. Например, если я установил минимальное значение моего ползунка в 0 миль и значение максимального значения в 50 миль, я хочу отображать только те места в этом диапазоне (здесь это 50 миль) в моем Tableview. Если я увеличиваю или уменьшаю диапазон ползунков, значения в моем представлении таблицы также должны быть изменены. Я использую CLLocation, чтобы найти расстояние между двумя точками.Как фильтровать значения UITableview с помощью ползунка?

Идеи приветствуются.

+0

Вы должны быть более конкретными, поскольку это слишком широкое. Как хранятся ваши места и как вы их показываете в виде таблицы? Это код, который вам нужно изменить, поэтому вам нужно его показать (и рассказать нам, о чем вы уже подумали/попробовали) – Wain

+0

Hi Wain. Каждый раз, когда меняет текущее местоположение, расстояние между двумя точками вычисляется на cellForRowAtIndexPath и обновляется в пользовательской ярлыке ячейки таблицы. – Vignesh

ответ

0

Каждый раз, когда ваше местоположение изменилось, вы должны рассчитать и сохранить расстояние в соответствующих данных местоположения с ключом как расстояние. Теперь в методе делегата вызывается с изменением значения вашего слайдера, фильтровать массив с

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(distance BETWEEN %@)",@[[NSNumber numberWithInt:loweValue], [NSNumber numberWithInt:upperValue]]]; 
filteredLocations = [allLocations filteredArrayUsingPredicate:predicate]; 
[table reloadData] 

Здесь allLocations массив, имеющий все места и filteredLocations является массивом, который хранит отфильтрованное местоположение и показать их в Tableview.

Если вы не хотите, чтобы сохранить дистанцию, то в вашем значение слайдера изменилось использование делегата

NSArray *allPlaces; 
    CLLocation *myLocation; 
    float lowerValue,uppervalue; 
    NSMutableArray *filteredPlaces; 
    [allPlaces enumerateObjectsWithOptions:NSEnumerationConcurrent 
          usingBlock:^(id place, NSUInteger idx, BOOL *stop) 
    { 
     if (uppervalue>[myLocation distanceFromLocation:(CLLocation *)[place objectForKey:@"location"]]>lowerValue) 
     { 

      [filteredPlaces addObject:place]; 
     } 
    }]; 
    [tableView reloadData]; 

, который будет фильтровать значения в соответствии с текущим местоположением пользователя. Здесь allPlaces - это массив со всеми местоположениями, myLocation - это текущее местоположение пользователя, а filterPlaces - массив в пределе. Выбирайте все, что хотите.