Ich bin neu in swift3.0 Ich bin ein benutzerdefiniertes Suchfeld implementieren. Ich möchte wissen, wie ich eine Suchwarteschlange so machen kann, dass auf Textänderung in searchbox ich Suchoperation mit neuem Text durchführen muss und wenn es eine vorhandene Suchoperation gibt, annulliere das. Ich möchte auch einen Schwellenwert ontextchanged enthalten. So wird dieser Suchvorgang nicht sehr häufig ausgelöstSo implementieren Sie eine Suchwarteschlange
Antwort
Ihre Frage ist irgendwie allgemein, aber lassen Sie mich Ihnen sagen, wie ich dies in Swift 3 und AFNetworking (das geht davon aus, dass Sie nach den Daten auf dem Server suchen wollen).
halte ich eine Referenz des Netzwerkmanagers in den Eigenschaften des View-Controller:
//The network requests manager. Stored here because this view controller extensively uses AFNetworking to perform live search updates when the input box changes.
var manager = AFHTTPRequestOperationManager()
Danach UISearchController mit mir überprüfen, um zu sehen, ob es ein Text in dem Suchfeld überhaupt und trat, wenn es ist, ich sicherstellen möchten, da von nun durch das Schließen einer von ihnen keine anderen laufenden AFNetworking Aufgaben sind, die noch ausgeführt werden:
//Called when the something is typed in the search bar.
func updateSearchResults (for searchController: UISearchController) {
if !SCString.isStringValid(searchController.searchBar.text) {
searchController.searchResultsController?.view.isHidden = false
tableView.reloadData()
return
}
data.searchText = searchController.searchBar.text!
/**
Highly important racing issue solution. We cancel any current request going on because we don't want to have the list updated after some time, when we already started another request for a new text. Example:
- Request 1 started at 12:00:01
- We clear the containers because Request 2 has to start
- Request 2 started at 12:00:02
- Request 1 finished at 12:00:04. We update the containers because data arrived
- Request 2 finished at 12:00:05. We update the containers because data arrived
- Now we have data from both 1 and 2, something really not desired.
*/
manager.session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in
dataTasks.forEach { $0.cancel() }
}
/**
Reloads the list view because we have to remove the last search results.
*/
reloadListView()
}
Am Ende, überprüfe ich auch in der failure
Schließung, wenn der Code der Fehler ist nicht NSURLErrorCancelled
. Denn wenn das passiert, zeige ich keine Fehlermeldung oder Toast an.
//The operation might be cancelled by us on purpose. In this case, we don't want to interfere with the ongoing logic flow.
if (operation?.error as! NSError).code == NSURLErrorCancelled {
return
}
self.retrieveResultListFailureNetwork()
Hoffe es hilft!
thanks dies hilft in Bezug auf HTTP-Anfrage und Antwort, aber ich bin tatsächlich in mehr generische suchen, wo ich jede Aufgabe hinzufügen und abbrechen kann, wenn eine neue Aufgabe kommt. –
- 1. So implementieren Sie eine Stopptaste
- 2. So implementieren Sie besser
- 3. So implementieren Sie eine zustandslose REST-API
- 4. So implementieren Sie eine containsAll-Methode
- 5. So implementieren Sie eine Bearbeitungsgenehmigungswarteschlange in Django
- 6. So implementieren Sie eine Zwei-Zustand-Taste
- 7. So implementieren Sie eine schreibgeschützte Eigenschaft
- 8. Hier SDK: So implementieren Sie eine CustomDataSource
- 9. So implementieren Sie eine Navigationsleiste in angularjs
- 10. So implementieren Sie eine Anti-Korruptionsschicht korrekt
- 11. So implementieren Sie IAsyncOperationWithProgress
- 12. So implementieren Sie Excel ACCRINT
- 13. So implementieren Sie ionRangeSliders dynamisch
- 14. So implementieren Sie Braintree Escrow
- 15. So implementieren Sie HTTP-Tunneling
- 16. So implementieren Sie threadsichere Warteschlangen
- 17. So implementieren Sie das Ereignis
- 18. So implementieren Sie if-else
- 19. DDD - So implementieren Sie Fabriken
- 20. So implementieren Sie SAML SSO
- 21. So implementieren Sie eine Eingabe mit einer Maske
- 22. So implementieren Sie eine Eigenschaft in einer Schnittstelle
- 23. Android: So implementieren Sie eine Bildergalerie mit RecyclerView
- 24. So implementieren Sie eine benutzerdefinierte Standardsortierung mit jQuery-Datentabelle
- 25. So implementieren Sie eine Dummy-REST-API in WSO2 ESB
- 26. So implementieren Sie eine Warteschlange als Priorität Warteschlange in Omnet ++?
- 27. So implementieren Sie eine "mehr lesen" -Link mit jQuery
- 28. So implementieren Sie eine solche Anfrage an DB
- 29. So implementieren Sie eine persistente Warteschlange in Android
- 30. So implementieren Sie eine Tomcat 7-Anwendung auf Openshift erneut
Also, was ist das Problem mit 'UISearchController' ?? :/ –
@agent_stack Ich möchte eine benutzerdefinierte UI wie Uber App erstellen. –
Sie wollten also die TextField, wo Benutzer den Standort suchen können? Ist ich richtig? –