Non c'è un modo semplice per trovare firstResponder
in iOS. Le risposte di cui sopra sono solo di monitoraggio UIView
s ma tutte le sottoclassi di UIResponder
come UIViewController
possono essere un primo risponditore.
Secondo la Quick Help
di UIResponder
:
Molti oggetti chiave sono inoltre intervento, inclusi l'oggetto UIApplication , oggetti UIViewController, e tutti gli oggetti UIView (che include UIWindow). Man mano che si verificano eventi, UIKit li invia agli oggetti risponditore della tua app per la gestione.
E l'unico modo per seguire UIResponder
catena sarà utilizzando UIResponder
s' next: UIResponder
proprietà.
Restituisce il risponditore successivo nella catena di risposta o nulla se non c'è nessun risponditore successivo. La classe UIResponder non memorizza o imposta il risponditore automatico automaticamente, quindi questo metodo restituisce nil per impostazione predefinita. Le sottoclassi devono sovrascrivere questo metodo e restituire un rispondente appropriato successivo a . Ad esempio, UIView implementa questo metodo e restituisce l'oggetto UIViewController che lo gestisce (se ne ha uno) o la sua superview (in caso contrario). UIViewController implementa in modo simile il metodo e restituisce la superview della vista. UIWindow restituisce l'oggetto applicazione . L'applicazione UIA restituisce zero.
Nella più UIKit
oggetto superview
, UIViewController
, UIWindow
, UIApplication
o Appdelegate
sarà il next
UIResponder
.
extension UIResponder {
func findFirstResponder() -> UIResponder? {
var responder: UIResponder? = self
while responder != nil {
guard let r = responder, r.isFirstResponder() else {
responder = responder?.next
continue
}
return r
}
return nil
}
}
Tuttavia quanto sopra non si fa traccia responder
's fratelli. Suppongo che se vuoi davvero tenerne traccia, devi controllare il tipo di risponditore e rintracciare il suo bambino (sottoview, controller vista bambino).
Quanti campi di testo sono presenti in TableView? –
Sono creati dinamicamente ma ho trovato un modo solo ora – Armand
Felice di saperlo, basta pubblicarlo come risposta. :) –