views:

333

answers:

1

I have a ordinary UITableViewController inside a UINavigationController. The former includes a searchbar which is connected to a search display controller. I use the standard behaviour, i.e. when the user enters any character the search results table view overlays the normal table view.

Now, both table views act inside a navigation controller. If I select one item from the search results table view, a new uitableviewcontroller (with specific information about the item selected) gets pushed onto the nav stack. When I hit the back button on that controller, I observe a strange behavior: The section headers of the normal table view overdraw the section headers of my search results table view. They are displayed as if my normal table view is being displayed (I can see that from the number of rows between the headers, though the rows remain empty). The search result table rows are still being displayed.

This behavior comes from the fact that I reload the table view on viewWillAppear. I do this to react on changes in the database made by the user at some other point in the application or automatic background data updates. I already tried to poll if the recently displayed table view is being shown via

(self.tableView == self.searchDisplayController.searchResultsTableView)

but that statement is always false after I return to my normal table view controller.

The question: how can I poll the correct state of my table view to avoid the displaying errors?

A: 

The UISearchDisplayController class implements an active property. Guess what it's used for :-)

e.g. just check for (self.searchDisplayController.active) or ([self.searchDisplayController isActive]).

MrMage
I must have overlooked that property... thank you very much!
ff10