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.
Correggo: headViewController.view è nullo, se non aggiunto come sottoview. è necessario scambiare addsubview e impostare il frame – NeverBe
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
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