2012-03-29 10 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 e la visualizzazione secondaria non viene visualizzato

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

e mi collegano la vista al proprietario del file.

E non riesco a vedere lo headViewController.view.

risposta

15

Prima di tutto, non è necessario definire la presa view nella classe HeadViewController. Viene automaticamente ereditato dalla super classe UIViewController.

Quindi, suggerisco di aggiungere direttamente la vista di HeadViewController alla vista corrente. Per esempio.

- (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]; 
} 

Ma, se si utilizza ARC (Automatic Reference Counting), l'istanza headViewController sarà probabilmente deallocato dopo la fine del metodo viewDidLoad. È conveniente (e direi che è obbligatorio) assegnare quell'istanza a una variabile locale nel controller che si sta visualizzando. In questo modo sarai in grado di gestire i componenti della vista in un secondo momento, se necessario, l'istanza verrà mantenuta e tutto il resto funzionerà perfettamente. Si dovrebbe avere qualcosa di simile:

- (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]; 
} 

e

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

nella definizione dell'interfaccia nascosta all'inizio del file di implementazione .m di classe.

+0

Correggo: headViewController.view è nullo, se non aggiunto come sottoview. è necessario scambiare addsubview e impostare il frame – NeverBe

+0

Controllare il mio aggiornamento su ARC. Se 'headViewController.view' è' nil', ricontrolla la connessione della vista con il controller nel file pennino. È 'nil' solo all'interno di questo metodo (problema di uscita) o dopo che è finito (problema ARC)? – marzapower

+0

Ho cambiato il codice, proprio come mi hai detto, e definisco una vista perché cancello quella predefinita. E non c'è ancora headViewController.view ... sono confuso. – jxdwinter

0

Sembra un errore di battitura - dimenticato la i in .Vedere

[vista addSubview: headViewController.vew];

+1

Potrebbe essere corretto, ma sembra che il op ha già risolto questo problema molto tempo fa ... – greedybuddha

0

i è mancante nella sintassi

[vista addSubview: headViewController.view];

+0

La risposta è stata fornita 2 anni fa. Qual è lo scopo ora? – YoungHobbit

+0

ho appena visto questo – Bharath

Problemi correlati