Ich habe den Code von Apples Beispiel-iOS-Projekt TableSearch geändert, um es zum Durchsuchen eines Webdienstes zu verwenden, indem ich seinen Inhalt analysiere. Alles, was ich implementiert habe, funktioniert gut, bis auf ein hässliches Detail, wenn ich eine Suche mit der SearchBar des SearchDisplayControllers durchführe. Ich habe das Verhalten des SearchDisplayControllers so geändert, dass er beim Drücken der Schaltfläche "Suchen" zuerst meine Suchfunktion aufruft.Nachladen/Anzeigen searchResultsTableView von UISearchDisplayController nachdem die Iteration der Suchmethode beendet ist
Das Problem ist, dass wenn die Suche Iteration (die im Hintergrund in einer NSOperationQueue ausgeführt wird) abgeschlossen ist die "searchResultsTableView" (der searchDisplayController) nicht automatisch angezeigt wird oder nicht den resultierenden Inhalt zugewiesen. Wenn Sie dann den Text der SearchBar ändern oder auf die Schaltfläche "Abbrechen" in der Ansicht tippen, die beim Berühren des Suchfelds angezeigt wird (siehe TableSearch), wird das korrekte TableView mit den Suchergebnissen angezeigt. Ich möchte einfach, dass dieser Schritt ausgeführt wird, direkt nachdem der Suchvorgang abgeschlossen ist, also bevor Sie interagieren. In diesem Stadium wird derzeit das Label "No Results" angezeigt. Die Methoden "filterContentForSearchText" und "shouldReloadTableForSearchString" sind gegenüber dem ursprünglichen TableSearch-Projekt unverändert.
Ich habe mir verschiedene Klassenreferenzen des SearchDisplayControllers und seiner Attribute angesehen, aber ich konnte noch keine endgültige Lösung finden.
Ich habe das Folgende in einem Abschnitt versucht, der definitiv wiederholt wird, nachdem die NSOperation beendet ist, aber es scheint das Problem nicht zu lösen.
[self.searchDisplayController.searchResultsTableView removeFromSuperview];
und
self.searchDisplayController.searchResultsTableView.hidden = YES;
Diese Operationen haben sowohl die korrekte Ansicht, die ich angezeigt wollen, aber Scrollen ist deaktiviert, bis Sie den Zustand ändern, so dass der Blick wieder versteckt. Es ist jedoch möglich, TableView-Zellen auszuwählen. Ich möchte im Grunde nur diese mit Scrollen aktiviert haben ...
Vielen Dank im Voraus für Ihre Mühe!
Haben Sie die shouldReloadTableForSearchString Methode in Ihrer Implementierung umgesetzt haben der UISearchDisplayController Delegat? –
Vielen Dank für Ihren Kommentar! Ja, ich habe, die Methode shouldReloadTableForSearchString ist von der ursprünglichen Version von Apple unverändert, sonst hätte ich meinen geänderten Code gepostet. Ich bin mir ziemlich sicher, dass ich diesbezüglich keine entscheidenden Methoden geändert habe. Weder "filterContentForSearchText". – John