我使用此代碼通過一個UITableView搜索:搜索表格視圖用的UISearchBar
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if(searchText.length == 0)
{
isFiltered = FALSE;
}
else
{
isFiltered = TRUE;
if (filteredTableData == nil)
filteredTableData = [[NSMutableArray alloc] init];
else
[filteredTableData removeAllObjects];
for (NSString* string in self.itemArray)
{
NSRange nameRange = [string rangeOfString:searchBar.text options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
if(nameRange.location != NSNotFound)
{
[filteredTableData addObject:string];
}
}
}
[tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}
一切工作正常,但如果我按下取消按鈕,當我開始編輯出現,我的列表中不回來,但搜索結果仍然存在。爲了顯示列表,我必須開始輸入,即使是搜索欄中的單個字符,然後刪除它或按「x」查看所有列表。有沒有辦法阻止取消按鈕?或者在按下時顯示列表?
您的代碼看起來是正確的。問題可能是你的'UITableViewDataSource'方法沒有正確處理過濾從'TRUE'變爲'FALSE'的情況(在obj-c中你應該使用'YES'和'NO')。另外,你不應該調用'reloadData'和'reloadSections:',你只需要調用一個。 – 2013-02-13 18:54:05
如果'isFiltered'和'filteredTableData'是成員變量,那麼通常在它們前面加上一個下劃線'_' – nielsbot 2013-02-13 19:23:43
'self.isFiltered = searchText.length> 0; self.tableData = self.isFiltered?問題是,如果我替換我的 - (void)searchBar:(UISearchBar * [self.itemArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@「SELF contains [cd]%@」,searchBar.text]]:self.itemArray;' – nielsbot 2013-02-13 19:26:24