7

Sono nuovo alla programmazione ios, ho bisogno di implementare qualcosa come una casella di ricerca di google, ad esempio, compilare automaticamente il campo di testo. Il mio scenario è il seguente 1.quando l'utente digita nel campo di testo chiamata 2.background al servizio web per i dati (dati richiesta = dati campo di testo).Riempimento automatico del testo sul servizio di risposta al servizio web

ad esempio: - se l'utente digita "abc" nel campo di testo, i dati di richiesta per la chiamata al servizio web devono essere "abc" e il servizio Web fornisce una risposta. La prossima volta che l'utente digita "d" il campo di testo i.e contiene "abcd" la risposta del servizio deve considerare il testo aggiunto. (qualcosa come il campo di ricerca di google) 3. la chiamata di servizio web dovrebbe essere asincrona. 4. La risposta dovrebbe essere visualizzata nell'elenco a discesa.

E 'possibile in ios ??? Qualsiasi tutorial o esempio sarebbe apprezzato. Grazie in anticipo.

risposta

4

Suppongo che tu stia parlando di un webservice Restful e NON SOAP, per l'amor di dio!

Sì, naturalmente è possibile. Puoi seguire questo approccio, potrei usare una lib di HTTP come AFNetworking per fare la richiesta ma per semplicità sto solo iniziando il NSData con il contenuto dell'URL sullo sfondo e aggiornando l'IU sul thread principale usando GCD.

  1. impostare il proprio delegato UITextField al ViewController si sta lavorando viewDidLoad: metodo

    textField.delegate = self; 
    
  2. l'override del metodo UITextField delegato textField:shouldChangeCharactersInRange:replacementString: con:

    - (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 
    } 
    

Come si può vedere c'è una lista di concetti che tu ne hai ed abituarsi a:

  • JSON analisi (Potrei analizzare XML, ma perché ?! JSON è modo migliore!)
  • HTTP Request (è possibile utilizzare AFNetworking al posto di quello che ho fatto in precedenza)
  • richieste HTTP asincrone (non bloccare thread principale)
  • GCD (la roba dispatch_async)
  • I delegati (in questo caso per UITextField)

aggiornamento delle prestazioni

  • quando si controlla se la dimensione è maggiore di 3 caratteri, si può anche solo fare richiesta HTTP ogni 2/3 caratteri, diciamo, solo richiesta se length % 3.

vi consiglio di leggere qualcosa su quelle

+0

Carlos ringrazio per la risposta. Controllerò e ti farò sapere – Raj

Problemi correlati