搜索/过滤UITableView

时间:2013-01-19 20:49:56

标签: objective-c uitableview uisearchbar

我想添加搜索以过滤表格视图。我知道如何做到这一点,但由于我的单元格是完全自定义的,我不知道如何按名称过滤,并根据名称从NSDictionary获取所有其他数据。

NSString *name = [searchResults objectAtIndex:indexPath.row];

这会在正确过滤后返回cell.textLabel的名称,但我需要重新获取所有信息,如我的字典中所示:

admin = ;
approved = ;
business = "";
category = ;
description = "";
distance = "";
email = "";
favs = ;
id = ;
image1 = "";
lat = "";
location = "";
lon = "";
name = "";
password = "";
rating = "";
telephone = "";
website = "";

如果有意义,我怎样才能重新获得上述所有信息,而不仅仅是获取商家名称?

1 个答案:

答案 0 :(得分:2)

需要更多信息,但是如果我正确地解释了你正在做的事情,那么你好像是从一个对象中提取名字字符串,然后用这些名字字符串填充一个数组作为你的UITableView的数据源。然后你试图从名称向后工作以获得原始对象。

如果是这种情况,为什么不用原始对象填充数组来支持数据存储,那么您可以根据UITableView的选定行轻松地逐行获取对象。您只需要更新设置单元格内容的位置,从对象中提取名称字段,而不是从单独的数组中提取。

示例:

// Defined in your class interface:
    NSMutableArray *searchResults = [[NSMutableArray alloc] init];
    NSMutableArray *myArray; // contains all of your objects, could be a dictionary as well


- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];

[searchArray addObjectsFromArray:myArray];

for (myObject *anObject in searchArray) {
    NSString *objectName = [myObject name];
    NSRange resultsRange = [objectName rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (resultsRange.length > 0)
        [searchResults addObject:anObject];
}

searchArray = nil;
}
  1. 这里我们从所有对象的数组开始,myArray(如果它们存储在Dictionary中,只需在下一步中转换为数组)。

  2. 新数组searchArray将填充主阵列中的所有对象(如图所示)或字典(其他转换)。

  3. 在循环中,searchArray中每个对象的名称字段与searchBar中的文本进行比较。如果searchBar内容存在于name字段中,则该对象将添加到结果数组searchResults。

  4. 使用searchResults作为UITableView的数据源,将每个单元格的文本设置为searchResults中相应对象的名称。现在,UITableView的每一行都与您的对象直接相关。

  5. 请注意,我最初是通过以下网站学习此方法的。我建议您完成他们的教程 - 它很快并演示了一些与搜索设置结合使用的其他不错的功能。请注意,它是在ARC之前编写的,因此如果您使用ARC,则需要省略一些release语句等。