7

Ich bin neu in der IOS-Programmierung, muss etwas wie eine Google-Suchfeld implementieren, d. H. AutoFill-Textfeld. Mein Szenario ist wie folgt 1.wenn Benutzer eingeben Textfeld 2. Background-Aufruf an Webservice für Daten (Anfrage Daten = Textfeld Daten).Auto-Fill-Text auf Web-Service-Anruf Antwort

zum Beispiel: - Wenn der Benutzertyp "abc" im Textfeld Anfrage Daten für Web-Service-Aufruf sollte "abc" sein und Web-Service gibt Antwort darauf. Jetzt das nächste Mal Benutzer Typ "d", d. H. Textfeld enthält "abcd" Service-Antwort muss den angehängten Text berücksichtigen. (so etwas wie Google-Suchfeld) 3. Web-Service-Aufruf sollte Asynchron sein. 4. Antwort sollte in der Dropdown-Liste angezeigt werden.

Ist es in ios möglich ??? Jedes Tutorial oder Beispiel wäre willkommen. Vielen Dank im Voraus.

Antwort

4

Ich nehme an, Sie sprechen über einen Restful Webservice und nicht SOAP, für die Liebe Gottes!

Ja, natürlich ist es möglich. Sie können diesem Ansatz folgen, ich könnte eine HTTP-Lib wie verwenden, um die Anfrage zu machen, aber der Einfachheit halber initiiere ich nur die NSData mit dem Inhalt der URL im Hintergrund und aktualisiere UI im Hauptthread mit GCD.

  1. Legen Sie Ihre UITextField Delegierter der Viewcontroller Sie arbeiten an viewDidLoad: Methode

    textField.delegate = self; 
    
  2. Überschreibung der UITextField Delegatmethode textField:shouldChangeCharactersInRange:replacementString: mit:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    
        // To increase performance I advise you to only make the http request on a string bigger than 3,4 chars, and only invoke it 
        if(textField.text.length + string.length - range.length > 3) // lets say 3 chars mininum 
        { 
         // call an asynchronous HTTP request 
         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    
          NSURL * url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http:/example.com/search?q=%@", textField.text]]; 
          NSData * results = [NSData dataWithContentsOfURL:url]; 
          NSArray * parsedResults = [NSJSONSerialization JSONObjectWithData: results options: NSJSONReadingMutableContainers error: nil]; 
          // TODO: with this NSData, you can parse your values - XML/JSON 
          dispatch_sync(dispatch_get_main_queue(), ^{ 
           // TODO: And update your UI on the main thread 
           // let's say you update an array with the results and reload your UITableView 
           self.resultsArrayForTable = parsedResults; 
           [tableView reloadData]; 
          }); 
         }); 
    
        } 
    
        return YES; // this is the default return, means "Yes, you can append that char that you are writing 
        // you can limit the field size here by returning NO when a limit is reached 
    } 
    

Wie Sie sehen können Es gibt eine Liste von Konzepten, die du brauchst ed, um sich daran zu gewöhnen:

  • JSON Parsing (Ich könnte XML analysieren, aber warum ?! JSON ist viel besser!)
  • HTTP Request (Sie AFNetworking statt, was ich oben getan haben können)
  • Asynchronous HTTP-Anfragen (nicht Hauptthread blockieren)
  • GCD (die dispatch_async Sachen)
  • Die Delegierten (in diesem Fall für UITextField)

Performance Update

  • Wenn Sie überprüfen, ob die Größe größer als 3 Zeichen ist, können Sie sogar nur HTTP-Anfragen alle 2/3 Zeichen machen, sagen wir, nur Anfragen, wenn length % 3.

Ich schlage vor, Sie etwas über diejenigen lesen

+0

Carlos Ihnen für Ihre Antwort danken. Ich werde es überprüfen und Sie wissen lassen – Raj