L'ambito di un primo risponditore in iOS è determinato dalla gerarchia delle viste. Ricorda, un rispondente fa parte di una gerarchia di responder e viene definito dalla documentazione di Apple:
Un risponditore è un oggetto che può rispondere agli eventi e gestirli. Tutti gli oggetti responder sono istanze di classi che in definitiva ereditano da UIResponder (iOS) o NSResponder (OS X).
In pratica, tutti i soccorritori fanno parte di una catena di potenziali risponditori che arrivano fino all'applicazione stessa. Ciò significa che l'ambito di risposta del risponditore è determinato da quanto in alto deve essere la catena per ottenere un oggetto in grado di gestire una risposta. Se il primo risponditore è un elemento dell'interfaccia utente, ad esempio un UITextField, l'ambito è legato all'ambito di tale risponditore.
In questa immagine, prima gerarchia risponditore iOS è mostrata a sinistra (OS X a destra):
Per rispondere alla seconda parte della domanda, sì, gli oggetti possono 'rubare' primo stato di responder se un utente interagisce con un elemento, ad esempio:
- L'utente fa clic su textField1. Ora è il primo a rispondere.
- L'utente fa clic su textField2. Ha assunto lo status di primo risponditore da textField1.
... e si può conferire primo stato risponditore su di loro con determinate funzioni:
[textField3 becomeFirstResponder]; //This is now the first responder
[textField4 becomeFirstResponder]; //Now textField2 has 'stolen' first responder status
[textField4 resignFirstResponder]; //The text field has resigned its first responder status to the next level up
Per chiunque altro leggendo questo che non ha colpito fino documentazione di Apple su questo, un buon punto di partenza è la spiegazione della gerarchia Responder trovata qui: https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia-CocoaApp/Responder.html
Spero che questo aiuti!
fonte
2014-12-15 17:35:40
Grazie per la risposta. Per ulteriori chiarimenti, quando un elemento si dimette dallo stato di primo soccorritore, significa che l'ultimo elemento che è diventato il primo risponditore in precedenza, diventa nuovamente il primo risponditore? –
Non funziona. Quando chiami 'resignFirstResponder', significa semplicemente che non esiste un risponditore designato come corrente. Non hai un primo soccorritore in ogni momento. –
Per dirla in termini molto profani, si può chiamare "onFocus"? –