2011-12-19 24 views
7

Ho 30 pulsanti in una vista in Interface Builder. Ognuno ha un tag diverso tra 100001 e 100030. Ho trovato facile usare la stessa azione per ogni pulsante, passando il tag per ognuno quando premuto e usando il codice per decidere quale livello caricare.Posso collegare più oggetti con tag diversi allo stesso IBOutlet?

Desidero connettere tutti i pulsanti a un singolo IBOutlet, ma ogni pulsante carica un'immagine diversa in base ai dati salvati dell'utente e al tag del pulsante.

Come posso fare?

risposta

23

Usa IBOutletCollection per aggiungere una collezione di uscita per il vostro controller di vista, in questo modo:

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons; 

Questo vi permetterà di collegare tutti i pulsanti a una presa di corrente. La proprietà buttons sarà un NSMutableSet contenente tutti i pulsanti. È possibile continuare a identificare i singoli pulsanti utilizzando la proprietà tag del pulsante. Questo è utile se si desidera scorrere tutti i pulsanti, forse per impostare l'immagine di ogni pulsante:

for (UIButton *b in self.buttons) { 
    b.imageView.image = [self imageForTag:b.tag]; 
} 

(Avrete bisogno di fornire il metodo -imageForTag: per fornire la giusta immagine per un determinato tag, o di trovare un altro modo per mappare dai tag alle immagini.)

Ovviamente, se si conosce già l'intervallo di valori dei tag per tutti i pulsanti e se si è preoccupato di rendere i tag univoci all'interno della vista contenente tutti i pulsanti, è anche possibile recuperare ciascun pulsante singolarmente utilizzando -viewWithTag:. Probabilmente non è così veloce come l'intero set di pulsanti già creato, come si ha con la collezione outlet descritta sopra, ma significa che c'è una cosa in meno da mantenere.

+1

Sì, il posto giusto! Ho appena provato questo, e NSLog'ed il conteggio della matrice, e la sua connessione del pulsante perfettamente ... L'unico che non so come fare è quindi utilizzare questo per cambiare l'immagine di questo pulsante? Cosa faccio codice saggio? Grazie! –

+0

L'impostazione dell'immagine del pulsante non è diversa se si utilizza IBOutletCollection piuttosto che un semplice vecchio IBOutlet, tranne per il fatto che è necessario prima prelevare ciascun pulsante dalla raccolta. Ho aggiunto un piccolo frammento sopra che potrebbe essere d'aiuto. – Caleb

+1

Grazie, ora funziona! : D –

0

Seguire questa procedura per creare una matrice di punti vendita un collegarlo con IB elementi:

  • creare un array di IBOutlets
  • Aggiungere più UIElements (Viste) nell'interfaccia Storyboard ViewController
  • Select ViewController (Nello storyboard) e aprire l'ispettore di connessione
  • C'è un'opzione "Raccolte Outlet" nell'ispettore di connessione (vedrete una serie di punti vendita lì)
  • Collegare se con i vostri elementi di interfaccia

-

class ViewController2: UIViewController { 


    @IBOutlet var collection:[UIView]! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

enter image description here

Problemi correlati