2012-02-01 11 views
6

HI tengo una clase de vista personalizada que se carga y se coloca dentro de mi vista principal con el siguiente código. El motivo es que quiero rellenarlo con contenido diferente, así que en lugar de crear una vista en código cada vez que creo una clase personalizada, puedo reutilizar esto en un bucle, etc., conseguí que esto funcione bien en el código, que está poniendo fuera de la etiqueta de botones, etc.iOS5 Asignar un .xib a una clase UIView personalizada

Pero en lugar de codificarlo todo, pensé que si creaba una nueva Vista de interfaz de usuario, construía visualmente mis campos de texto, etiquetas y botones en esta vista.

A continuación, conéctelo a mi clase personalizada.

Bu esto es donde estoy teniendo un problema, ¿cómo puedo conectar este archivo de vista xib para que se vuelva visible cuando se coloca en mi mi código. He asignado el atributo de clase personalizado dentro del archivo xib a mi archivo personalizado, pero ¿qué más me estoy perdiendo?

archivo .h:

#import <UIKit/UIKit.h> 

@interface blogView : UIView 

@end 

.m del archivo:

#import "blogView.h" 

@implementation blogView 

- (id)init 
{ 
    self = [super initWithFrame:CGRectMake(0, 0, 478, 220)]; 
    if (self != nil) 
    { 
     NSLog(@"Blog View loaded"); 

     self.backgroundColor = [UIColor yellowColor]; 

     UILabel *titleLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 400, 40)]; 
     [titleLbl setText:@"This is the Title"]; 

     [self addSubview:titleLbl]; 

    } 
    return self; 
} 

@end 

mi archivo xib tiene el mismo nombre blogView.xib que es una interfaz de usuario de Vista.

Dentro de mi vista controlador principal y en el viewDidLoad tengo

blogView *blogItem = [[blogView alloc]init]; 
    [self.view addSubview:blogItem]; 

Cuando ejecuto esto es todo trabaja muy bien, pero me gustaría enlazar a un archivo .xib Para ahorrar tiempo, etc. Gracias

Respuesta

14

bien tener mirada alrededor y tratando de bits de pistas y sugerencias logré hacer esto con lo siguiente:

Dentro de mi archivo .m coloqué/modifican los siguientes:

self = [super init]; 
    if (self != nil) 
     {  
      NSArray *theView = [[NSBundle mainBundle] loadNibNamed:@"blogView" owner:self options:nil]; 
      UIView *nv = [theView objectAtIndex:0]; 

    .. rest of code. 

    [self addSubview:nv]; 

.. rest of code. 

Muchas Gracias

+0

Hm no pude conseguir que funcione dentro del init, sino que parece funcionar si lo pones en el drawRect: - (void) drawRect: (CGRect) rect { NSArray * theview = [[NSBundle mainBundle ] loadNibNamed: @ "RatingPickerView" owner: self options: nil]; UIView * nv = [theView objectAtIndex: 0]; [self addSubview: nv]; } – Dan2552

+0

Pero, ¿cómo se hace un controlador para ello y cómo se hace referencia al controlador desde el controlador de la vista que lo contiene? – Dan2552

+0

?? A qué te refieres –

0

Es posible que desee crear un controlador para la vista y cargar ese punto de vista usando initWithNibName:bundle:

+0

gracias por su sugerencia intentó esto para las edades antes de la publicación, pero simplemente no pude conseguir que esto funcione, seguía chocando. –

4

luché con esto por una hora cuando cambió el nombre de mi clase viewcontroller. Esto es lo que funcionó para mí en Xcode 5

  1. Ir a su archivo XI ter
  2. Haga clic en caja transparente propietario archivos en la ficha de sus inspecciones izquierda
  3. Abran (tercer botón de la derecha en la vista de sección - entre Editor y Organizador)
  4. Vaya a su Inspector de identidad (tercero desde la izquierda) debajo de la pestaña de visualización del organizador del editor.
  5. Corrija la clase personalizada - Clase de opción a la clase que desee que responda.

Digamos que yo estaba muy molesto después de perder el tiempo con que

Cuestiones relacionadas