Domanda

Ho un app con 2 schermi (MainViewController e AboutViewController). Al momento l'utente fa clic su un pulsante, vorrei caricare la schermata AboutViewController, che è definito in un altro XIB.

sembra semplice, ma io non riesco a trovare il mio google-fu di oggi. Come faccio a tirare fuori questo?

È stato utile?

Soluzione

Quando si chiama [AboutViewController init], ci si aspetta di chiamare qualche forma di [super init], che è sinonimo di [UIViewController init]. Quando questo accade, il controller della vista cercherà automaticamente un file nib chiamato (nel tuo caso) AboutViewController.xib. Se trova il file, lo carica è contenuto nel tuo controller della vista per voi.

Quindi, in pratica, tutto quello che dovete fare è inizializzare il controller di vista, e assicurarsi che ha lo stesso nome del file nib associato.

Se si voleva caricare un file pennino con un nome diverso nel vostro controller della vista, si potrebbe chiamare in modo esplicito initWithNibName:bundle: con il nome di qualsiasi file nib ti piace

Se l'init standard (con un file nib dello stesso nome) non funziona per voi, ci sono un paio di cose che si potrebbero verificare.

  • l'ortografia del nome della classe è lo stesso che l'ortografia (e corpo) del file nib
  • il file pennino è incluso nel progetto, e non solo seduti nella stessa directory
  • metodo init tuo UIViewController di sottoclasse non chiama anche [super init]
  • si sta chiamando metodo init tua UIViewController della sottoclasse
  • si sta effettivamente facendo vista del controller della vista visibile

Altri suggerimenti

Con un proposito di schermo che probabilmente solo vuole mostrare una vista e poi respingerlo. Quindi, piuttosto che utilizzare un nuovo controller di vista si può solo coprire la vista corrente.

Supponendo di avere un Ivar

UIView *aboutUsView;

con la proprietà appropriata.

Nel vostro controller della vista fare:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items
[self.view addSubview:aboutUsView];  // Retains the view
[aboutUsView release];

Per rimuovere la vista, dire in un'azione collegata a un pulsante sulla vista, fare:

[aboutUsView removeFromSuperview], aboutUsView = nil;  // Releases the view

NSBundle loadNibNamed:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top