我使用此代码通过一个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