¿Qué es una definición formal de un primer respondedor en iOS?

Entiendo que un primer object de respuesta es el que recibe una señal de callback de acuerdo con la actividad de input, etc., y que la hará circular por la cadena hasta que se encuentre un respondedor dispuesto a manejarlo.

Pero más formalmente, ¿cuál es el scope del primer respondedor? Por ejemplo, ¿es un respondedor de toda la aplicación? Parece que ser un primer respondedor es simplemente decir que este object en particular recibirá una notificación de interacción. ¿Puede otro respondedor robar el primer estado de respuesta?

Por favor, explícame o dirígeme a alguna información pertinente. He leído la explicación general de Apple de lo que es un respondedor. Estoy buscando una explicación que está poco desarrollada.

El scope de un primer respondedor en iOS está determinado por la jerarquía de vista. Recuerde, un respondedor es parte de una jerarquía de respondedores, y definido por la documentation de Apple:

Un respondedor es un object que puede responder a los events y manejarlos. Todos los objects de respuesta son instancias de classs que finalmente henetworkingan de UIResponder (iOS) o NSResponder (OS X).

Prácticamente hablando, todos los respondedores son parte de una cadena de posibles respondedores que llevan hasta la aplicación misma. Esto significa que el scope del respondedor está determinado por la distancia de la cadena a la que debe llegar para get un object capaz de manejar una respuesta. Si el primer respondedor es un elemento de interfaz de usuario, como un UITextField, su scope está vinculado al scope de ese respondedor.

En esta image, la jerarquía de primera respuesta de iOS se muestra a la izquierda (OS X a la derecha):

Jerarquía del Primer Respondedor

Para responder a la segunda parte de la pregunta, sí, los objects pueden "robar" el estado del primer respondedor si un usuario interactúa con un elemento, por ejemplo:

  1. El usuario hace clic en textField1. Ahora es el primer respondedor.
  2. El usuario hace clic en textField2. Se ha tomado el estado de primer respondedor de textField1.

… y puede otorgarles el primer estado de respuesta con ciertas funciones:

[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 

Para cualquier otra persona que lea esto que no ha tocado la documentation de Apple sobre esto, un buen punto de partida es la explicación de la jerarquía Responde que se encuentra aquí: https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia- CocoaApp / Responder.html

¡Espero que esto ayude!

Es una propiedad de la window. La window tiene en todo momento no más de un primer respondedor. Cualquier UIResponder puede reclamar el estado de primer respondedor al ser enviado becomeFirstResponder , y es por eso que puede hacer que un UITextField obtenga "foco" enviándole ese post.