我想添加搜索以过滤表格视图。我知道如何做到这一点,但由于我的单元格是完全自定义的,我不知道如何按名称过滤,并根据名称从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 = "";
如果有意义,我怎样才能重新获得上述所有信息,而不仅仅是获取商家名称?
答案 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;
}
这里我们从所有对象的数组开始,myArray(如果它们存储在Dictionary中,只需在下一步中转换为数组)。
新数组searchArray将填充主阵列中的所有对象(如图所示)或字典(其他转换)。
在循环中,searchArray中每个对象的名称字段与searchBar中的文本进行比较。如果searchBar内容存在于name字段中,则该对象将添加到结果数组searchResults。
使用searchResults作为UITableView的数据源,将每个单元格的文本设置为searchResults中相应对象的名称。现在,UITableView的每一行都与您的对象直接相关。
请注意,我最初是通过以下网站学习此方法的。我建议您完成他们的教程 - 它很快并演示了一些与搜索设置结合使用的其他不错的功能。请注意,它是在ARC之前编写的,因此如果您使用ARC,则需要省略一些release
语句等。