I am using this code to search through a UItableView:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if(searchText.lengt
Implement - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar delegate method of UISearchBar. In that add all objects(initial objects in table) in filteredTableData array and reload table.
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
[filteredTableData removeAllObjects];
[filteredTableData addObjectsFromArray:self.itemArray];
[tableView reloadData];
}
Also you don't need to maintain flag isFiltered if you are using it for choosing data source array for reloading table(in table view data source methods). e.g.
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(isFiltered)
return filteredTableData.count
else
return self.itemArray.count
}
If you maintain data in filteredTableData array all time, you don't need to do this. Your method will look like-
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return filteredTableData.count
}
Initially in init or viewDidLoad method of controller add all objects in filteredTableData and use only this array for reloading table.
Hence your method will look like-
-(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];
}