Comprensión de la lógica del sistema para el primer respondedor

Estoy confundido sobre varios puntos de primera respuesta:

  1. Si llamo - becomeFirstResponder , ¿la llamada del sistema – canBecomeFirstResponder primero? ¿Por qué?
  2. ¿Por qué hay ambos - becomeFirstResponder y – canBecomeFirstResponder ? ¿En qué situaciones pueden devolver valores diferentes?
  3. ¿La aplicación debe tener el primer respondedor en todo momento? Si es así, ¿qué está sucediendo cuando – resignFirstResponder en algún object? ¿ UIApplication convierte en el primer respondedor de inmediato o es este "token" lanzado en algún punto de la cadena de respuesta? ¿Puedo llamar - becomeFirstResponder en el object UIApplication cuando quiero deshacerme de ese token peregrino?

Por favor, alguien me explique cómo el sistema maneja su primer respondedor. Lo que está sucediendo debajo del capó cuando algún object se convierte en el primer respondedor, y cuando renuncia al primer respondedor. ¿Qué llamadas hace el sistema … Gracias!

  1. La implementación pnetworkingeterminada de becomeFirstResponder llama a canBecomeFirstResponder . Esto se debe a que se supone que un respondedor que devuelve NO de canBecomeFirstResponder se convierta en el primer respondedor.
  2. becomeFirstResponder hará que el receptor sea realmente el primer respondedor si tiene éxito. canBecomeFirstResponder simplemente comtesting si el receptor está dispuesto a ser el primer respondedor, sin cambiar realmente nada. Es posible que becomeFirstResponder pueda fallar si la primera respuesta actual se niega a renunciar. Puede haber otras situaciones en las que becomeFirstResponder podría fallar.
  3. No tiene que haber nada en el código que tenga el estado del primer respondedor. A juzgar por el método de firstResponder privado UIResponder firstResponder , el sistema no asigna ningún valor pnetworkingeterminado particular en este caso.

Básicamente, cuando algo quiere convertirse en el primer respondedor, se le pide que renuncie al primer respondedor actual (si lo hay), y luego el nuevo object se convierte en el primer respondedor. Esto puede hacer que el sistema muestre el keyboard en pantalla o realice alguna otra acción. Cuando el primer respondedor renuncia, esto puede causar que el sistema oculte el keyboard en pantalla o tome alguna otra acción.

Cuando entra un evento no táctil, primero se entrega a la UIWindow. UIWindow lo entrega al primer respondedor. La documentation no parece especificar si UIWindow intenta manejar el evento en sí (y lo pasa a UIApplication como de costumbre si no lo maneja por sí mismo) o simplemente ignora el evento si no hay un primer respondedor.

Consulte la documentation para más detalles.