Domanda

Ho un problema con la creazione di un modale vista di ricerca che emula il comportamento di quella del Weather app. In particolare, ci sono due animazioni, che mi dà fastidio e non necessari introducono 0,2 s ritardi:

  • Quando la vista modale diventa visibile, io do attenzione alla UISearchDisplayController.searchBar da caling becomeFirstResponder in viewDidAppear. Tuttavia, la tastiera non è visibile, quando la vista modale è scivolato in, ma necessita di altri 0,2 secondi a scorrere in dopo l'animazione di tehe transizione vista modale è completa. Spostando la chiamata ad un altro richiamata come viewWillAppear o viewDidLoad ha non va bene, la tastiera non verrà visualizzato in primo luogo.

  • Quando i tocchi utente si annullano, c'è un altro animazione che si svolgono, prima che il metodo searchDisplayControllerDidEndSearch del delegato è chiamato, ampliando il campo di testo di ricerca e "fusione" lontano il pulsante. Ancora una volta, questa animazione viene unneded come si suppone che il vista modale di transizione quando il pulsante viene toccato.

  • Inoltre, quando respingere e ri-presentare la stessa vista, non solo il vetrino tastiera dopo la transizione, ma la annulla pulsante fa la stessa (fortunatamente simultaneamente).

Sono a conoscenza di un problema simile descritto qui: tastiera Animazione Problemi durante la chiamata becomeFirstResponder all'interno di un modale View controller . Tuttavia, sembra che il comportamento della barra di ricerca è sligtly differet poi quella di testo del campo. Non riuscivo a riprodurre i passi descritti da quell'autore per visualizzare la tastiera visibile chiamando becomeFirstResponder in viewDidLoad.

Saluti, Chris

È stato utile?

Soluzione

Credo che ho trovato la risposta. Quando si aggiunge una barra di ricerca utilizzando il costruttore di interfaccia, è possibile farlo in due modi: "barra di ricerca" e "Barra di ricerca e di ricerca Controller"

.

Stavo usando il secondo e stava avendo lo stesso problema che hai descritto. Potrei richiamare solo la tastiera (utilizzando becomeFirstResponder) su "viewDidAppear". Ma se lo si fa aggiungendo solo la barra di ricerca che funziona. Ora posso chiamare becomeFirstResponder su "viewDidLoad" e la tastiera appare insieme con la vista stessa.

I significa un po 'di lavoro di più, ma in realtà non molto. È necessario impostare il controller per essere il delegato della barra di ricerca. Ho aggiunto una vista elenco per i risultati e feci il mio controller diventare un suo delegato e la sua origine dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top