2014-11-13 11 views
6

Quando si sottoclasse UITableViewController, normalmente si ottengono determinati comportamenti "gratuitamente". Ad esempio, quando un campo di testo nella vista tabella diventa il primo soccorritore, il controller della vista si scorre automaticamente per assicurarsi che il campo sia completamente visibile.UITableViewController lo scorrimento automatico si interrompe tenendo conto della tastiera quando viene visualizzato da un UISplitViewController

Tuttavia, quando il controller di visualizzazione tabella è il controller di visualizzazione dettagli di uno UISplitViewController, questo scorrimento automatico non tiene più in considerazione la presenza della tastiera. Il controller della vista tabella continuerà a scorrere automaticamente per mantenere il campo di testo entro i limiti dello schermo, ma non scorre più per impedire che il campo venga coperto dalla tastiera.

Puoi testare questo te stesso creando un nuovo progetto utilizzando il modello "Master-Detail Application" di Xcode e sostituendo il controller della vista di dettaglio con un controller di visualizzazione tabella che visualizza celle con campi di testo al loro interno.

Mi piacerebbe capire perché il interrompe automaticamente lo scorrimento tenendo conto della tastiera in questo caso e, se possibile, come correggerlo senza dover duplicare la funzionalità di auto-scorrimento da solo. A proposito, questo non ha nulla a che fare con l'override di viewWillAppear (come in alcune altre domande sullo scorrimento automatico del controller di visualizzazione tabella).

+0

Quindi il cablaggio è probabilmente hardcoded se si tratta di un 'UITableViewController' principale' UITableView' risponde a 'UITextField' inizia a modificare la chiamata dei delegati, ma si perde questo se il' UITableViewController' non è il root controller. Non ne avevo idea, ma non mi sorprende. Ecco perché non mi è mai piaciuto usare 'UITableViewController' in primo luogo e penso che ciò significhi che devi scrivere il cablaggio' UITextField'. – believesInSanta

risposta

0

So che è tardi, ma questo potrebbe aiutare gli altri che stanno avendo questo problema. Questo succede anche a me quando ho aggiunto textfield in UITableViewCell. Quello che ho fatto è stato quello di rimuovere

superViewWilAppear: animato linea

nel viewWillAppear method.So il metodo è simile al seguente

-(void)viewWillAppear:(BOOL)animated{ 
    //[superViewWilAppear:animated]; 
    Your rest of code 
} 

Ma ciò che fa è rimuove l'auto scrolling tutto insieme e devi gestire lo scorrimento di UITableView quando textField inizia a modificare. Non so se questo ha risolto il tuo problema ma ti risparmierà il problema di considerare l'altezza della tastiera per diversi dispositivi e sarà meglio gestirla da solo. Inoltre non sono sicuro se questo è il modo giusto per farlo, ma ha funzionato per me.

Problemi correlati