如何使用滑块过滤UITableview值?

时间:2014-12-08 16:52:08

标签: ios uitableview nsslider

我使用自定义UITableview单元格来显示我当前位置与世界上几个随机位置之间的距离。如果我现在的位置是纽约市,那么我现在的位置和印度之间的距离大约是4000英里左右。我当前到伦敦的位置之间的距离是2000英里等。现在我想在我的表视图中使用滑块来定义指定范围内的位置。例如,如果我将滑块的最小值设置为0英里并将最大值设置为50英里,我想在我的Tableview中仅显示该范围内的那些位置(此处为50英里)。如果我增加或减少滑块范围,我的tableview中的值也应该更改。我使用CLLocation查找两点之间的距离。

我们很感激。

1 个答案:

答案 0 :(得分: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是用户的当前位置,filteredPlaces是限制内的数组。选择你想要的任何东西。