I am looking to create a searchBar and while I have it somewhat working on my Table View, there's still a bit of effort required to get it 100% perfect.
With reference to iOS 7 Mail.app, how do I deploy something like that? So a search bar that does not display the "cancel" button till you click in the search bar, and a cancel button that cancels the search and returns the table to where it was.
I have the following code:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
_fetchedResultsController = nil;
NSError *error;
if (![[self fetchedResultsController] performFetch:&error])
{
NSLog(@"Error in search %@, %@", error, [error userInfo]);
}
else
{
[self.timelineTableView reloadData];
[self.timelineSearchBar resignFirstResponder];
[self.noResultsLabel setHidden:_fetchedResultsController.fetchedObjects.count > 0];
}
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
[self.timelineSearchBar resignFirstResponder];
self.timelineSearchBar.hidden = YES;
[self.timelineTableView reloadData];
[self viewDidLoad];
}
So with this, I basically want the searchBar to be visible all the time in the Table View, and to NOT display the cancel button, till the user starts typing. If they perform a search and it produces results or it doesn't, I want the cancel button to:
- ResignFirstResponder of the search bar
- Remove the cancel button
- Return the Table view to how it was before the search.
Thanks
Use the following two methods in the
UISearchBarDelegate
and do something like this:If you want the search to appear more responsive you can move your posted code to the
searchBar:textDidChange:
delegate method and then only usesearchBarSearchButtonClicked:
to do a[searchBar resignFirstResponder]
:Additionally you can use the
searchBarCancelButtonClicked:
to also resign the first responder from the search bar and then update your table view by calling the delegatesearchBar:textDidChange:
: