2013-01-19 172 views
0

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

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 = ""; 

我怎样才能重新获得以上所有信息,从只是得到企业名称,如果这是有道理的?

回答

2

需要更多的信息,但是如果我解释你正在做的是正确的,t好像是从一个对象中提取名称字符串,然后用这些名称字符串填充一个数组作为你的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的数组(如果它们存储在一个字典,只是转换到一个数组中的下一个步骤)。

  2. 新阵列searchArray会填充主阵列(如图所示)或字典(附加转换)中的所有对象。

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

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

请注意,我最初通过以下网站了解到了这种方法。我建议通过他们的教程进行工作 - 这很快,并演示了一些与搜索设置配合使用的其他好用功能。请注意,它是在ARC之前编写的,因此假设您使用的是ARC,则需要省略release语句等。

+0

我理解这个概念,但我怎么能做到这一点?我需要根据搜索词“过滤”原始字典。所以,如果我搜索'麦当劳',它会查字典,找到'商家'='麦当劳',然后返回该字典,如果这是有道理的!? – rjg

+0

已更新,显示搜索方法的示例代码,在searchBar内更新文本时调用该方法。 –

+0

全部排序,谢谢大卫! – rjg