我正在使用此代码搜索UItableView:
-(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];
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但如果我按下开始编辑时出现的取消按钮,我的列表不会回来,但搜索结果仍然存在.要显示列表,我必须开始输入,甚至是搜索栏中的单个字符,然后将其删除或按"x"查看所有列表.有办法阻止取消按钮吗?或者在按下时显示列表?
实现 - (void)searchBarCancelButtonClicked:(UISearchBar*)UISearchBar的searchBar委托方法.在那里添加所有对象(表中的初始对象)在filteredTableData数组和重载表中.
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
[filteredTableData removeAllObjects];
[filteredTableData addObjectsFromArray:self.itemArray];
[tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
如果您使用它来为重新加载表选择数据源数组(在表视图数据源方法中),也不需要维护标志isFiltered.例如
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(isFiltered)
return filteredTableData.count
else
return self.itemArray.count
}
Run Code Online (Sandbox Code Playgroud)
如果始终在filteredTableData数组中维护数据,则不需要执行此操作.你的方法看起来像 -
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return filteredTableData.count
}
Run Code Online (Sandbox Code Playgroud)
最初在控制器的init或viewDidLoad方法中添加filteredTableData中的所有对象,并仅使用此数组来重新加载表.
因此,您的方法看起来像 -
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if(searchText.length == 0)
{
[filteredTableData removeAllObjects];
[filteredTableData addObjectsFromArray:self.itemArray];
}
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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10214 次 |
| 最近记录: |