4

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!

+1

Haben Sie die shouldReloadTableForSearchString Methode in Ihrer Implementierung umgesetzt haben der UISearchDisplayController Delegat? –

+0

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

Antwort

16

Ich habe das gleiche Problem und ich habe es gerade gelöst. Ich hatte genau das selbe Problem, ich wollte die sofortige Suche deaktivieren und wenn ich den Suchknopf drücke, wurde die Tabelle nicht geladen, aber als ich auf Abbrechen klickte, wurde es geladen. Und wenn ich in der Tabellenansicht scrollen, die das korrekte Ergebnis nach der Suche nicht geladen hat, stürzte es aufgrund des Index ab.

Die Sache, die Sie tun müssen, lädt searchResultTableView nicht aktuelle Tabellenansicht neu. Nachdem Sie Ihre Daten nach Suchbegriff herauszufiltern, setzen

[self.searchDisplayController.searchResultsTableView reloadData] 

Ihr Suchergebnis erneut zu laden, und es wird zeigt, nachdem Sie Taste auf Suche klicken. Hope this Hilfe

0

Ich fand, dass die searchBar.text Einstellung bewirkt, dass searchDisplayController.searchResultsTableView zu self.view hinzugefügt werden, löse ich es so:

self.searchBar.text = @"xxxx"; 
[self.searchDisplayController.searchResultsTableView removeFromSuperview]; 
Verwandte Themen