2010-09-03 20 views
5

Come appare l'utilizzo pratico di IBOutletCollection? Sfortunatamente la documentazione di Apple la menziona brevemente senza dare un'idea più ampia dell'uso. OK, mantiene una relazione uno-a-molti con IB, ma come accedere e utilizzare oggetti particolari in modo efficiente? Con TagName? Come garantire l'ordine degli oggetti?Utilizzo pratico efficiente di IBOutletColletion

risposta

5

L'ho usato di recente per inizializzare facilmente una griglia di etichette. Ho una matrice n di etichette su una vista e le riferimento singolarmente (tramite un IBOutlet) per visualizzare i dati rilevanti. Tuttavia, quando la vista viene caricata per la prima volta, desidero controllare il testo predefinito visualizzato in tutte le etichette. Inizialmente volevo mostrare un trattino, ma dato che questo è per un cliente, volevo che fosse facile cambiarlo. I contenuti della vista hanno e continuano a cambiare nel tempo, secondo le richieste dei clienti.

Invece di scrivere la riga N di codice, ho creato un IBOutletCollection e ottenuto gli stessi risultati in 4 (@property, @synthesize e for loop). YMMV ma l'ho trovato molto utile in questa situazione.

0

Leggere di nuovo this section nella Guida dell'utente di Interface Builder.

IBOutletCollection s sono in realtà solo NSArray s è possibile connettersi a più di un oggetto in IB. Tutti gli oggetti che hai collegato finiscono in questo array e puoi accedervi dal codice come qualsiasi altro oggetto in un array.

+0

Questo è esattamente ciò che è descritto nella documentazione di Apple :) Ora, come osserva l'utilizzo pratico? Hai detto, posso accedere ad ogni oggetto come qualsiasi altro oggetto in qualsiasi altro array. Vero, ma come viene ordinato questo array? Dovrei farlo da solo all'inizio? E come distinguere gli oggetti in questo array? Con le etichette? In tal caso, dovrei scorrere l'intero array per trovare gli oggetti che sto cercando, o è meglio cercare nell'array con predicato? An so on ... – juckobee

+1

Se stai cercando oggetti specifici probabilmente non dovresti usarlo. Usalo se vuoi essere in grado di scorrere su un elenco di elementi. Se hai bisogno di distinguerli potresti usare la proprietà 'tag', o forse' target' e/o 'action'. – Sven

+1

Sfortunatamente, l'ordine di aggiunta di elementi alla raccolta non viene conservato nel runtime. – zubko

0

L'ho usato per minimizzare il codice. Ho una gamma di UIViews che dovrebbero reagire agli eventi di "ritocco all'interno" di alcuni UIButtons (modalità personalizzata).

Ho dato a tutti gli UIButton un tag (diciamo 1005 a 1010) e tutti gli UIViews hanno lo stesso tag di UIButton a cui rispondono.

Quindi ho collegato l'UIViews alla raccolta in Interface Builder. Tutti gli eventi di ritocco di UIButton passano alla stessa funzione nel mio controller. Questa funzione ottiene il tag dell'oggetto mittente, itera attraverso l'elenco NSArray (di "IBOutletCollection (UIView)") e confronta il tag. Ogni volta che colpisce, viene eseguita l'azione appropriata.

E 'un peccato che NSArrays sembrano non tenere l'ordine ...

Problemi correlati