2010-11-01 21 views
20

Me gustaría crear un par de vistas personalizadas, una especie de componentes UI reutilizables, y preferiría no diseñar la UI en código en la subclase UIView. Me gustaría usar un xib para eso. He usado un xib solo. Y he usado una subclase UIView por sí mismo. Pero no los he usado juntos. ¿Cómo los "adjunto" el uno al otro? Me gustaría utilizar IBOutlets para acceder a UILabels en mi vista personalizada.¿Cómo usar un xib y una subclase UIView juntos?

¿Funcionará este tipo de cosas?

NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil]; 
MyCustomView *view = [xib objectAtIndex:0]; 
view.myLabel.text = @"fred"; 
+2

Ver http://stackoverflow.com/a/5056886/385619 – Willster

Respuesta

14

Si esa es la forma en que funciona cuando se está cargando xibs que no son los padres a viewControllers

Edición 15 de agosto de, 2013:

No siempre puede asumir que usted Obtendrá exactamente lo que está buscando del índice 0 del NSArray devuelto, que es lo que hace que sea bueno usar la verificación de tipos.

NSArray *xibArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:nil options:nil]; 
MyCustomView *myView = nil; 
for (id xibObject in xibArray) { 
//Loop through array, check for the object we're interested in. 
    if ([xibObject isKindOfClass:[MyCustomView class]]) { 
     //Use casting to cast (id) to (MyCustomView *) 
     myView = (MyCustomView *)xibObject; 
    } 
} 
+2

Yo entiendo que esto funcione de la manera que quería. Creé la subclase UIView, agregué los IBOutlets para los dos UILabels que tengo. En Interface Builder, cambié la clase de vista a mi subclase UIView y establecí las salidas de referencia en mis dos etiquetas a la vista. – Ron

+0

Estoy tratando de hacer lo mismo: ¿sabe qué nombre de clase debería usar para (a) el UIControllerView padre y (b) la UIView personalizada aquí? He notado en mi código que tengo mi nombre de clase UIView personalizado en ambos, pero eso me da una llamada recursiva a mi método de inicio de UIView personalizado. Es decir, tengo (a) en el UIControllerView padre que utiliza mi vista personalizada, en IB para su XIB, uso un UIView que he establecido el nombre de clase en "clockview", pero luego (b) en mi Uviewiew personalizado de reloj real (no UIControllerView) Archivo XIB He hecho lo mismo y configuré el nombre de la clase para que sea "clockview". – Greg

+0

¡Esto consume demasiado tiempo! cualquier otro truco? – Krish

Cuestiones relacionadas