2010-07-13 12 views
9

Esiste un equivalente iPhone per i metodi NSResponder-selectNextKeyView o -nextValidKeyView da Mac OS X? Conosco il metodo -becomeFirstResponder, ma scoprire quale vista per chiamarla su non è molto carina quando le gerarchie di vista diventano più complicate.Concentrarsi sulla vista chiave valida successiva su iPhone

Ci deve essere un qualche modo per scoprirlo come quando premo la scheda quando nell'iPhone Simulator, la messa a fuoco passa correttamente al successivo UITextField. Questo mi ha fatto chiedere cosa succede esattamente quando premo tab. Qualche idea?

Aggiornamento: questo fa esattamente quello che voglio, ma _nextKeyResponder è un'API privata, quindi un no-no. C'è un modo per fare un tasto 'falso' premere il tasto tab senza usare l'API privata?

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    // Try to find next responder 
    UIView *nextResponder = (UIView *)[self.view _nextKeyResponder]; 

    if (nextResponder) { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
     [self.tableView scrollRectToVisible:[self.tableView convertRect:[nextResponder frame] fromView:nextResponder] animated:YES]; 
    } else { 
     // Not found, so remove keyboard. 
     [textField resignFirstResponder]; 
    } 
    return NO; // We do not want UITextField to insert line-breaks. 
} 

risposta

11

Non esiste un equivalente iOS pubblico per NSResponder-selectKeyView o -nextValidKeyView.

Quando il primo risponditore è un'istanza di UITextField, scheda premendo istanzia un sottoclasse privata di UIEvent che è passato -[UIApplication sendEvent:], che a sua volta richiama -[UIView _nextKeyResponder].

-[UIView _nextKeyResponder] non funziona nel modo in cui si pensa. Tratta la catena di viste chiave come un ciclo, quindi il tuo blocco else non sarà mai raggiunto. Per lo stesso motivo, anche se esistesse un'API pubblica per sintetizzare eventi di tastiera, probabilmente non si vorrebbe usarla.

Invece, probabilmente si desidera qualcosa di più come l'UIToolbar modulo di immissione dati accessorio UIToolbar. I pulsanti possono essere abilitati e disabilitati quando appropriato e il suo delegato gestisce le azioni di pressione dei pulsanti effettive.

Per implementare tale delegato in modo generale, tuttavia, potrebbe essere utile consultare how -[UIView _nextKeyResponder] is implemented.

+0

Bella risposta! Apprezzo il dettaglio in cui sei entrato. –

0

Nel UITextField delegato -textFieldDidEndEditing:, passare tra i vari campi di testo (ad esempio, testando proprietà del campo di testo tag).

Quando si abbina un campo di testo, impostare un altro campo di testo o un altro controllo per diventare il prossimo risponditore.

+1

come ho scritto nella mia interrogazione, sono consapevole di tale metodo. Mi stavo chiedendo se potevo in qualche modo sfruttare ciò che è già in iOS quando gestisce una scheda. –

Problemi correlati