Mi aplicación tiende a perder a veces la pista de qué respondedor debe manejar un evento táctil.El evento UIButton no se manejó el 1% del tiempo: ¿a quién debo culpar en mi cadena de respuesta?
Mi situación:
- un archivo XI ter definiendo 3 vistas:
- una vista como vista del propietario del archivo vistas
- 2 adicionales que se agregan a la jerarquía de la vista mediante programación
- Una de las subvistas (SubviewA) tiene un
UIButton
, configurado para enviar el selectormyAction:
alFirstResponder
cuando se detecta evento "Touch Up Inside" - SubviewA sabe cómo manejar
myAction:
99% del tiempo, todo va bien. Cuando el usuario pulsa el botón, SubviewA se ocupa del mensaje myAction:
y todo está bien. Pero de vez en cuando, los usuarios se quejan de que el botón "se congela" y yo mismo lo reproduje un par de veces sin poder encontrar un escenario claro para hacerlo a pedido.
Mi investigación hasta ahora es:
- cuando no ocurre nada al pulsar el botón:
- mi botón detecta el grifo causa se pone de relieve cuando se pulsa
myAction:
no se llama en SubviewA- el resto de la interfaz de usuario sigue siendo receptiva
El código del que estoy hablando es algún código heredado que estoy tratando de corregir. Tener una vista respondiendo a un evento para una de sus subvistas me parece una arquitectura extraña. Hasta ahora, siempre he usado el propietario del archivo para encargarme de los eventos táctiles, así que señalé que la cadena respondedora es la responsable ideal del error. ¡Pero no puedo encontrar por qué! Desde mi entendimiento, como el botón no sabe cómo manejar el mensaje y no tiene ningún controlador de vista conectado, debería reenviarlo a su supervista (¡Botón A, que sabe cómo manejarlo)!
Mis preguntas son:
- alguna idea de donde el insecto podría venir de? (¿cadena de respuesta?)
- ¿Algún comentario sobre si una vista debería manejar sus propios comportamientos de botón o si un controlador de vista debería hacerlo?
Editar: Tengo una idea sobre cómo solucionar el error: alambre de la acción del botón directamente a SubviewA en lugar de utilizar FirstResponder dentro Interface Builder. La razón por la que publiqué esta pregunta es para tratar de entender por qué la cadena de respuesta no funciona de vez en cuando.
Se agradable ver algún código ... – tarmes
Código no .m implicado: solo archivos XIB, que no son realmente fáciles de compartir. –