Frage

Ich habe eine App mit 2 Bildschirmen (Mainviewcontroller und AboutViewController). Wenn der Benutzer auf eine Schaltfläche klickt, würde Ich mag den AboutViewController Bildschirm laden, die in einem anderen XIB definiert ist.

Scheint einfach, aber ich kann nicht mein Google-Fu heute zu finden scheinen. Wie ziehe ich das aus?

War es hilfreich?

Lösung

Wenn Sie [AboutViewController init] nennen, es ist zu erwarten, irgendeine Form von [super init] zu nennen, die ein Synonym für [UIViewController init] ist. Wenn dies geschieht, wird Ihr View-Controller sucht automatisch nach einer nib Datei mit dem Namen (in diesem Fall) AboutViewController.xib. Wenn es diese Datei findet, lädt es Inhalte in Ihren View-Controller für Sie.

Also im Grunde alles, was Sie tun müssen, um Ihre View-Controller initialisieren, und stellen Sie sicher, dass es die gleichen Namen wie die zugehörigen Nib-Datei hat.

Wenn Sie eine NIB-Datei mit einem anderen Namen in die View-Controller laden möchten, können Sie explizit aufrufen initWithNibName:bundle: mit dem Namen je nachdem, was nib Datei, die Sie mögen

Wenn der Standard-init (mit einer gleichen Namen nib-Datei) ist nicht für Sie arbeitet, gibt es ein paar Dinge, die Sie überprüfen können.

  • die Schreibweise des Klassennamen ist das gleiche wie die Schreibweise (und Fall) der Nib-Datei
  • die NIB-Datei wird in dem Projekt einbezogen, und zwar nicht nur im selben Verzeichnis
  • sitzt
  • Ihre UIViewController Unterklasse der init-Methode ruft auch [super init]
  • Sie Ihre UIViewController Unterklasse der init-Methode
  • Aufruf
  • Sie machen in der Tat Ihre View-Controller Ansicht sichtbar

Andere Tipps

Mit einem Info-Bildschirm möchten Sie wahrscheinlich nur einen Blick zeigen, und dann entlassen. Anstatt also eine ganz neue View-Controller verwenden, können Sie nur die aktuelle Ansicht abdecken.

Angenommen, Sie einen Ivar haben

UIView *aboutUsView;

mit der entsprechenden Eigenschaft.

In Ihren View-Controller zu tun:

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

Um die Ansicht zu entfernen, sagen sie in einer Aktion mit einer Schaltfläche verbunden auf der Ansicht, tun:

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

NSBundle loadNibNamed:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top