2009-09-19 11 views
11

Ich habe eine App mit 2 Bildschirmen (MainViewController und AboutViewController). Wenn der Benutzer auf eine Schaltfläche klickt, möchte ich den AboutViewController-Bildschirm laden, der in einem anderen XIB definiert ist.Wie lade ich ein XIB?

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

Antwort

30

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 passiert, sucht Ihr View-Controller automatisch nach einer Nib-Datei, die (in Ihrem Fall) AboutViewController.xib genannt wird. Wenn es diese Datei findet, lädt es den Inhalt in Ihren View-Controller für Sie.

Also im Grunde alles, was Sie tun müssen, ist 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 Ihren View-Controller laden möchten, können Sie initWithNibName:bundle: mit dem Namen der gewünschten Nib-Datei aufrufen.

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 im Projekt enthalten ist, und zwar nicht nur im selben Verzeichnis
  • sitzt
  • Ihre UIViewController Unterklasse der init-Methode auch [super init]
  • ruft Sie rufen Ihre UIViewController init-Methode der Unterklasse
  • Sie machen in der Tat Ihre Sicht des view-Controller sichtbar
+4

ich automatisch geladen keine Idee XIBs hatten, waren so was. Vielen Dank! – DOOManiac

0

NSBundle loadNibNamed:

11

Mit einem Info-Bildschirm Sie wollen wahrscheinlich nur einen Blick zeigen, und dann entlassen. Anstatt einen ganz neuen View-Controller zu verwenden, können Sie einfach die aktuelle Ansicht abdecken.

Sie Angenommen, haben eine Ivar

UIView *aboutUsView; 

mit der entsprechenden Eigenschaft.

Ihrer Ansicht Controller tun:

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

die Ansicht zu entfernen, sagen wir in einer Aktion auf eine Schaltfläche auf der Ansicht verbunden sind, tun:

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

Er sagte ausdrücklich, er habe zwei View-Controller, "MainViewController und AboutViewController", keine View-Controller und eine Ansicht. – mahboudz

+5

Korrigieren. Und ich sagte ausdrücklich, dass er beide nicht braucht, um sein erklärtes Ziel zu erreichen. –

+0

Dies scheint die offensichtliche Methode. – user1432813