De acuerdo con la documentación de iOS, la cadena de respuesta se utiliza para pasar eventos táctiles "arriba de la cadena". También se usa para acciones generadas por controles. Multa.Caminando por la cadena de respuesta para pasar eventos personalizados. ¿Esto esta mal?
Lo que realmente me gustaría hacer es enviar una costumbre caso "en la cadena". El primer respondedor que elija el evento lo manejará. Esto parece un patrón bastante común, pero no puedo encontrar una buena explicación sobre cómo hacerlo en "iOS/Cocoa way".
Dado que la cadena de respuesta es exactamente lo que necesito, se le ocurrió una solución como esta:
// some event happened in my view that
// I want to turn into a custom event and pass it "up":
UIResponder *responder = [self nextResponder];
while (responder) {
if ([responder conformsToProtocol:@protocol(ItemSelectedDelegate)]) {
[responder itemSelected:someItem];
break;
}
responder = [responder nextResponder];
}
Esto funciona perfectamente, pero tengo la sensación de que no debe haber otras maneras de manejar esto. Caminar la cadena manualmente de esta manera no parece muy ... agradable.
Tenga en cuenta que las notificaciones no son una buena solución a este problema, porque yo sólo quiero que los objetos en la jerarquía de vistas a estar involucrados, y las notificaciones son globales.
Cuál es la mejor manera de manejar esto en iOS (y Cacao para el caso)?
EDITAR:
¿Qué deseo lograr?
Tengo un controlador de vista, que tiene una vista, que tiene subvistas, etc ... Varias de las subvistas son de un tipo específico que muestra un elemento de la base de datos. Cuando el usuario toca esta vista, se debe enviar una señal al controlador para navegar a una página de detalles de este elemento.
La vista que maneja el grifo es de varios niveles por debajo de la vista principal en la jerarquía de vistas. Tengo que decirle al controlador (o en algunos casos una subvista específica "arriba de la cadena") que se ha seleccionado un elemento.
Escucha de notificaciones sería una opción, pero no me gusta que la solución porque la selección de un artículo no es un evento global. Está estrictamente vinculado al controlador de vista actual.
"... Tengo la sensación de que debe haber otras maneras de manejar esto ..." Puede haber, pero es difícil de decir sin saber exactamente por qué quiere pasar un evento personalizado en la cadena. ¿Cuál es tu objetivo final? –
Vea mi explicación agregada en la pregunta. –
Con respecto a esta pregunta de cinco años ... esta es la hermosa y moderna forma de Swift para hacer ciertas tareas como esta http://stackoverflow.com/a/37515358/294884 – Fattie