2011-01-22 22 views
10

Tengo un controlador de vista que se crea una instancia en appDelegate y se inserta en un controlador de navegación. La vista del controlador de vista se crea con un archivo xib. El archivo xib pone un UILabel en la vista (entre otras cosas). Ahora necesito establecer la propiedad de texto de la etiqueta programáticamente pero no veo cómo obtener una referencia a ella. ¿Cómo hago referencia al objeto etiqueta?En iOS, ¿cómo hago referencia a un objeto en una vista que se crea con un archivo xib?

Estoy usando xcode 3.2.5 y construyendo una aplicación para iPad.

Respuesta

27

Además de IBOutlets, también puede establecer una propiedad de etiqueta en la etiqueta en el IB. Luego, cuando lo necesite, puede hacerlo:

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

111 por supuesto, es la etiqueta que asignó a la etiqueta en IB.

+1

Esto es bueno. Nunca supe cómo usar etiquetas y ahora sé. ¡Muchas gracias! – RobertL

+0

¿Has probado el código proporcionado arriba? Según la documentación de Apple, viewWithTag devuelve un UIView, nada más: "Devuelve la vista cuya etiqueta coincide con el valor especificado". El error de tiempo de ejecución confirma lo que indica la documentación, en el sentido de que esperaba una vista: 2016-03-13 17: 28: 40.961 LumaCoreData [5211: 1212054] - [UIView value]: selector no reconocido enviado a la instancia 0x14d6dbc00 2016-03- 13 17: 28: 40.962 LumaCoreData [5211: 1212054] *** Aplicación de finalización debido a la excepción no detectada 'NSInvalidArgumentException', razón: '- [Valor de UIView]: selector no reconocido enviado a la instancia 0x14d6dbc00' –

9

Hace esto con lo que se llama una "toma de corriente". Los define en su controlador, márquelos claramente como IBOutlet y luego conéctelos en el Interface Builder al propietario de su archivo (u otro objeto delegado creado en IB).

Por ejemplo, en su FooController.m que puede tener esta:

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

allí tendría que seleccionar su etiqueta, y, o bien control de arrastre de la misma para el propietario del archivo, o ir a la pestaña de conexiones y arrastre desde + en la salida de referencia, al propietario del archivo y seleccione fooLabel.

ACTUALIZACIÓN: El código de la muestra cambió para reflejar la forma moderna de manejar este caso.

+0

Esta es una respuesta buena y útil. Gracias. Le daría un cheque verde pero aparentemente no puedo dar cheques a dos respuestas diferentes a pesar de que ambas son buenas y ya he comprobado otra. – RobertL

0

[self.view viewWithTag:NUMBER_OF_TAG]; hace el truco. Pero recuerde que si desea acceder a la vista debe hacerlo en los eventos viewWillAppear o viewDidAppear.

Cuestiones relacionadas