0

我想添加一个搜索来过滤表视图。我有一个想法,但由于我的单元格是完全自定义的,我不确定如何按名称过滤,并从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 = "";

如果有意义的话,我如何才能从获得公司名称中重新获得上述所有信息?

4

1 回答 1

3

需要更多信息,但是如果我正确地解释了您所做的事情,那么您似乎正在从对象中提取名称字符串,然后使用这些名称字符串填充一个数组作为 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 中的文本进行比较。如果 name 字段中存在 searchBar 内容,则将该对象添加到结果数组 searchResults。

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

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

于 2013-01-19T21:15:27.777 回答