2015-02-23 7 views
9

Ich verwende UISearchController in iOS 8 mit dem folgenden intializaiton in viewDidLoad eines View-Controller in einem Tab-Controller eingebettetUISearchController macht den Controller schwarz

_searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 

    _searchBar = _searchController.searchBar; 
    [_searchController.searchBar sizeToFit]; 
    _searchController.searchBar.delegate = self; 
    _searchController.searchResultsUpdater = self; 
    _searchController.dimsBackgroundDuringPresentation = NO; 
    _searchController.hidesNavigationBarDuringPresentation = NO; 
    self.definesPresentationContext = NO; 
    _shopsTable.tableHeaderView = _searchController.searchBar; 

I

- (void) updateSearchResultsForSearchController:(UISearchController *)searchController und (void)filterContentForSearchText:(NSString *)searchText

implementiert haben

und die Suche funktioniert, wird die Tabellenansicht ordnungsgemäß aktualisiert usw.

Aber!

Wenn ich die Registerkarten wechsle, während der Suchcontroller aktiv ist (indem ich einfach auf die Suchleiste oder mit etwas Text tippe) auf eine andere Registerkarte und dann zurück auf die Suchregisterkarte, bekomme ich einen leeren Bildschirm mit nur der Suchleiste diese

enter image description here

In diesem Fall suche ich für Dinge, die mit lar beginnen, die Ergebnisse haben zurückzukehren und angezeigt sie correcly. Aber wenn ich die Tabs wechsle und auf die Suchregisterkarte zurückkehre, bekomme ich einen leeren Bildschirm wie diesen. Die einzige Möglichkeit, wie der Controller in seinen ursprünglichen Zustand zurückkehrt, ist, wenn ich _searchController.active = NO mache. Aber wenn der Benutzer diese Suche aktiv halten möchte, kann ich sie nicht einfach deaktivieren.

Ich bin sicher, ich bin etwas fehlt, aber da gibt es nicht viel in UISeachController zu tun ist, ich kann nicht herausfinden, was ist der Grund dafür ..

+0

können Sie bitte Beispielcode C-Code zur Verfügung stellen, bin ich mit demselben Problem fest? Ich bin sehr neu in der IOS-Entwicklung. Ich habe separate View-Controller für die Suche sowie die Hauptliste. Das ist das Problem. – Amith

Antwort

20

Versuchen self.definesPresentationContext = YES; anstelle von NEIN. Hier ist, wie ich meinen UISearchController eingerichtet habe, aber ich habe es noch nicht so in einem UITabBarController getan.

func setupSearchController() { 
    let resultsController = UIStoryboard(name: "ATPageTableViewController", bundle: nil).instantiateViewControllerWithIdentifier("ATPageTableSearchResultsViewController") as! ATPageTableSearchResultsViewController 
    searchController = UISearchController(searchResultsController: resultsController) 
    searchController.delegate = self 
    resultsController.delegate = self 
    resultsController.cellIdentifier = ATDataSetItemTableViewCellIdentifier; 
    resultsController.table = self.table! 
    searchController.searchBar.sizeToFit() 
    self.tableView.tableHeaderView = searchController.searchBar 
    searchController.searchResultsUpdater = self 
    searchController.searchBar.delegate = self 
    definesPresentationContext = true 

} 
+1

Danke, es hat mir nicht direkt geholfen, aber es hat mich zu dem Problem geführt. Ich habe einen View-Controller mit Tabellen-Delegaten verwendet, und als ich dann zu einem Tableview-Controller wechselte, wurde das Problem gelöst. –

0

Schreiben Sie den folgenden Code in viewDidLoad mehtod.

self.definesPresentationContext = true

searchController.searchResultsUpdater = Selbst

searchController.searchBar.delegate = Selbst

searchController.dimsBackgroundDuringPresentation = false searchController.definesPresentationContext = true