2013-01-19 248 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