2011-01-22 2 views
10

Ho un controller di visualizzazione che viene istanziato in AppDelegate e inserito in un controller di navigazione. La vista del controller della vista è creata con un file xib. Il file xib mette un UILabel sulla vista (tra le altre cose). Ora ho bisogno di impostare la proprietà del testo dell'etichetta programmaticamente, ma non vedo come ottenere un riferimento ad esso. Come faccio a fare riferimento all'oggetto etichetta?In iOS, come faccio a fare riferimento a un oggetto in una vista creata con un file xib?

Sto usando xcode 3.2.5 e sto costruendo un'app per iPad.

risposta

27

Oltre a IBOutlets, è possibile anche impostare una proprietà di tag sull'etichetta nell'IB. Poi, quando ne hai bisogno, puoi fare:

UILabel *label = (UILabel *)[self.view viewWithTag:111]; 

111 ovviamente è il tag che hai assegnato all'etichetta in IB.

+1

Questo è buono. Non ho mai saputo usare i tag e ora lo so. Grazie mille! – RobertL

+0

Hai testato il codice sopra riportato? Per documentazione di Apple, viewWithTag restituisce un UIView-nient'altro: "Restituisce la vista il cui tag corrisponde al valore specificato." L'errore di runtime conferma ciò che afferma la documentazione, in quanto si aspettava una vista: 2016-03-13 17: 28: 40.961 LumaCoreData [5211: 1212054] - [Valore UIView]: selettore non riconosciuto inviato all'istanza 0x14d6dbc00 2016-03- 13 17: 28: 40.962 LumaCoreData [5211: 1212054] *** Termina l'applicazione a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '- [Valore UIView]: selettore non riconosciuto inviato all'istanza 0x14d6dbc00' –

9

Lo fai con quello che viene chiamato "sbocco". Li definisci nel tuo controller, li contrassegni chiaramente come IBOutlet e poi li colleghi in Interface Builder al tuo proprietario di file (o altro oggetto delegato creato in IB).

Per esempio, nella vostra FooController.m si potrebbe avere questo:

@interface FooController() 
@property (nonatomic, weak) IBOutlet UILabel* fooLabel; 
@end 

Quindi è necessario selezionare l'etichetta, e sia controllo di trascinamento da esso per il proprietario del file, o andare alla sua scheda connessioni, e trascinate da lo + sotto l'uscita di riferimento, al proprietario del file e selezionare fooLabel.

UPDATE: esempio di codice modificato per riflettere il modo moderno di gestire questo caso.

+0

Questa è una risposta buona e utile. Grazie. Gli darei un assegno verde ma a quanto pare non posso dare assegni a due risposte diverse anche se sono entrambe buone e ne ho già controllato un'altra. – RobertL

0

[self.view viewWithTag:NUMBER_OF_TAG]; fa il trucco. Ricorda però che se vuoi accedere alla vista devi farlo negli eventi viewWillAppear o viewDidAppear.