Come sopprimere virtuale tastiera slide-in animazione?
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 inviewDidAppear
. 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 comeviewWillAppear
oviewDidLoad
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
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.