5 Stimmen

Wie kann eine Suche mit UISearchDisplayController vorgeladen oder initialisiert werden?

Ich habe einen UISearchDisplayController zu meinem UITableViewController im InterfaceBuilder hinzugefügt. Es war sehr einfach, ihn zum Laufen zu bringen, indem ich eine searchBar: searchBar textDidChange: searchText Methode, die das Datenfeld für die Tabelle neu generiert und die reloadData .

Ich möchte jedoch, dass die vorherige Suche angezeigt wird, wenn der Benutzer das nächste Mal die Suchleiste berührt, da es viel einfacher ist, das (X) zu berühren und es zu löschen, als es erneut einzugeben. Aber ich schaffe es nicht, dies zu tun. Im Folgenden finden Sie den Code, den ich ausprobiert habe:

- (void) searchBar: (UISearchBar *) searchBar textDidChange: (NSString *) searchText {
    if( searchText && [searchText length] > 0 ) {
        self.displayedRows = [[NSMutableArray initWithCapacity: 1];
        for( NSString *l in self.allRows ) {
            NSRange r = [l rangeOfString: searchText];
            if( r.location != NSNotFound )
                [self.displayedRows addObject: l];
        }
        [self.searchDisplayController.searchResultsTableView reloadData];
    }
}

- (void) searchDisplayControllerWillBeginSearch: (UISearchDisplayController *) controller {
    if( self.lastSearch && [self.lastSearch length] > 0 ) {
        controller.searchBar.text = self.lastSearch;
        [controller.searchResultsTableView reloadData];
    }
}

- (void) searchDisplayControllerWillEndSearch: (UISearchDisplayController *) controller {
    self.lastSearch = controller.searchBar.text;
    self.displayedRows = self.allRows;
    [self.tableView reloadData];
}

Wenn ich das nächste Mal auf die Suche tippe, steht der letzte Suchtext in der Suchleiste, und ich war überrascht, dass der "Cursor" sogar am Ende positioniert ist, aber die Suchergebnisse werden nicht angezeigt, sondern nur die abgedunkelte Ansicht des ursprünglichen Inhalts, als wäre das Suchfeld leer gewesen. Sobald ich ein Zeichen eingebe, werden die Suchergebnisse aktualisiert.

Ich habe versucht, das Äquivalent von [self.searchDisplayController.searchResultsTableView reloadData] in jedes von:

searchDisplayControllerDidBeginSearch: (UISearchDisplayController *) controller
searchDisplayController: (UISearchDisplayController *) controller didLoadSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller willShowSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller didShowSearchResultsTableView: (UITableView *) tableView

Aber es machte keinen Unterschied... einfach leer, bis ich etwas eintippe.

Hat jemand eine Idee, wie man ein vorgeladenes Suchergebnis erhält?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X