2010-09-03 16 views
5

¿Cómo se ve el uso práctico de IBOutletCollection? Lamentablemente, la documentación de Apple lo menciona brevemente sin dar una idea más amplia del uso. De acuerdo, mantiene una relación uno a muchos con IB, pero ¿cómo acceder y usar objetos particulares de manera eficiente? Con TagName? ¿Cómo asegurar el orden de los objetos?Uso eficiente práctico de IBOutletColletion

Respuesta

5

Recientemente he usado esto para inicializar fácilmente una grilla de etiquetas. Tengo una matriz n por n de etiquetas en una vista, y hago referencia a cada una de ellas individualmente (a través de una IBOutlet) para mostrar datos relevantes. Sin embargo, cuando la vista se carga por primera vez, quería controlar el texto predeterminado que se muestra en todas las etiquetas. Inicialmente quería mostrar un guion, pero como esto es para un cliente, quería que fuera fácil cambiarlo. Los contenidos de la vista tienen y continúan cambiando con el tiempo, según las solicitudes de los clientes.

En lugar de escribir N línea de código, creé un IBOutletCollection y logré los mismos resultados en 4 (@property, @synthesize y for loop). YMMV pero lo encontré muy útil en esta situación.

0

Lea nuevamente this section en la Guía del usuario de Interface Builder.

IBOutletCollection s son en realidad solo NSArray s se puede conectar a más de un objeto en IB. Todos los objetos que conectas terminan en esta matriz y se puede acceder desde el código como cualquier otro objeto en una matriz.

+0

eso es exactamente lo que se describe en la documentación de Apple :) Ahora, cómo se ve el uso práctico? Usted dijo, puedo acceder a cada objeto como cualquier otro objeto en cualquier otro conjunto. Es cierto, pero ¿cómo está ordenada esta matriz? ¿Debería ordenarlo por mi cuenta al principio? ¿Y cómo distinguir objetos en esta matriz? ¿Con etiquetas? Si es así, ¿debo iterar a través de la matriz completa para encontrar los objetos que estoy buscando, o es mejor buscar la matriz con predicado? Y así sucesivamente ... – juckobee

+1

Si está buscando objetos específicos, probablemente no deba usar esto. Úselo si quiere poder iterar sobre una lista de elementos. Si necesita distinguirlos, podría usar la propiedad 'tag', o tal vez el' target' y/o 'action'. – Sven

+1

Desafortunadamente, el orden de agregar elementos a la colección no se conserva en el tiempo de ejecución. – zubko

0

Lo usé para minimizar el código. Tengo un rango de UIViews que deberían reaccionar en eventos "retocar dentro" de algunos UIButtons (modo personalizado).

Di todos los UIButtons una etiqueta (digamos 1005 a 1010) y todos UIViews la misma etiqueta que el UIButton que responderán.

Luego conecté UIViews con la colección en Interface Builder. Todos los eventos de retoque UIButton van a la misma función en mi controlador. Esta función obtiene la etiqueta del objeto remitente, itera a través de la lista NSArray (de "IBOutletCollection (UIView)") y compara la etiqueta. Cada vez que golpea, se realiza la acción adecuada.

Es una lástima que NSArrays parecen no llevar a cabo la orden ...

Cuestiones relacionadas