2012-03-29 8 views
5
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)]; 
    [view addSubview:headViewController.vew]; 
    [self.view addSubview:view]; 
} 

HeadViewController.h:UIView addSubview y la subvista no se muestra

@interface HeadViewController : UIViewController 
{ 
    IBOutlet UIView *view; 
} 
@property (nonatomic, retain)IBOutlet UIView *view; 
@end 

y enlaces a la vista el propietario del archivo.

Y no puedo ver el headViewController.view.

Respuesta

15

En primer lugar, no es necesario definir la toma view en la clase HeadViewController. Se hereda automáticamente de la superclase UIViewController.

Luego, le sugiero que agregue directamente la vista de HeadViewController a su vista actual. P.ej.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

Pero, si está utilizando ARC (automático de recuento de referencia), la instancia headViewController probablemente cancelar la asignación después del final del método viewDidLoad. Es conveniente (y yo diría que es obligatorio) asignar esa instancia a una variable local en el controlador que está mostrando actualmente. De esta manera, podrá manejar los componentes de su vista más adelante si es necesario, se retendrá la instancia y todo lo demás funcionará perfectamente. Usted debe tener algo como:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

y

@interface MyController() 
    @property (nonatomic, strong) HeadViewController *headViewController; 
@end 

en la definición de interfaz oculta al inicio del archivo de implementación .m clase.

+0

Te corrijo: headViewController.view es nulo, si no se agrega como subvista. Necesito cambiar la vista auxiliar y establecer el marco – NeverBe

+0

Verifique mi actualización sobre ARC. Si 'headViewController.view' es' nil', compruebe dos veces la conexión de la vista con el controlador en el archivo de punta. ¿Es 'nil' solo dentro de este método (problema de salida) o después de que haya terminado (problema de ARC)? – marzapower

+0

Cambié el código, tal como me dijiste, y defino una vista porque elimino la predeterminada. Y todavía no hay headViewController.view ... estoy confundido. – jxdwinter

0

Parece que un error tipográfico - olvidó la i de .Ver

[Ver addSubview: headViewController.vew];

+1

Eso podría ser correcto, pero parece que Ya resolvió este problema hace mucho tiempo ... – greedybuddha

0

i no se encuentra en la sintaxis

[Ver addSubview: headViewController.view];

+0

La respuesta fue proporcionada hace 2 años. ¿Cuál es el propósito ahora? – YoungHobbit

+0

Acabo de ver este – Bharath

Cuestiones relacionadas