2012-04-04 10 views
2

Ich bin dabei, den Einstellungsbereich meiner App mit den neuen Funktionen von storyboards wiederherzustellen. Da ich zu diesem Zeitpunkt nicht den Rest meiner App anfassen möchte, bleibt meine Hauptnummer NIB.Storyboard von Nib aus starten?

Wenn nun von meinem NIB ‚going ed tabBar zu einem anderen NIB ich nur ein viewController zum tabBar in IB hinzufügen und legen Sie dann die NIB Name Eigenschaft auf den NIB, die ich geladen werden soll, wenn das Register gedrückt wird.

Aber es gibt keine "Storyboard Name" -Eigenschaft, die ich sehen kann, also wie wird das gemacht?

Antwort

3

Es gibt derzeit keinen "offiziellen" Weg, aber Sie können es mit ein paar Tricks machen.

1) fügen Sie Ihren View-Controller wie gewohnt in die Registerkarte in der Schreibfeder ein. Lassen Sie das Federfeld leer.

2) Erstellen Sie Ihr Storyboard und fügen Sie Ihren Viewcontroller hinzu. Stellen Sie die Klasse, und legen Sie ein Storyboard-ID (Ich werde „theID“ für dieses Beispiel verwenden)

3) fügen Sie einen statischen Bool var .m Datei, außerhalb Implementierung oder Schnittstelle

static BOOL aFlag = NO; 

4) in Ihrer Viewcontroller Klasse überschreibt diese Methode:

- (id) awakeAfterUsingCoder:(NSCoder *)aDecoder 
{ 
    if (!aFlag){ 
     aFlag = YES; 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil]; 
     return [storyboard instantiateViewControllerWithIdentifier:@"theID"]; 
    } else { 
     return self; 
    } 
} 

im wesentlichen:

  • , wenn Sie das Objekt aus der Tableiste nib laden , ein erster Aufruf von "initWithCoder" wird ausgeführt, und das Objekt wird ohne die Schreib-ID
  • geladen, nachdem initWithCoder awakeAfterUsingCoder aufgerufen wurde und Sie das Objekt durch ein anderes vom Storyboard geladenes Objekt ersetzen. Objekt der gleichen Klasse, aber im Storyboard
  • archiviert, wenn Sie das Objekt vom Storyboard laden, ein weiterer Aufruf von initWithCoder und awakeAfterUsingCoder. Sie das Flag verwenden, um eine Schleife zu vermeiden und selbst zurückkehren (beim zweiten Aufruf wird das Objekt von Storyboard geladen, so Rückkehr selbst ist ok)

Ich habe versucht, und es funktioniert gut ;-) Wenn Sie hier wollen, ist Ein Beispielprojekt: http://www.lombax.it/files/testTabNib.zip

+0

es funktionierte, aber aus irgendeinem Grund ist das Bild des TabBarItem verschwunden ... irgendeine Idee warum? – Kof

+1

Das Registerkartenelement (die Schaltfläche, die in der Registerkartenleiste angezeigt wird) ist eine Eigenschaft des Ansichtscontrollers, nicht der Registerkartenleiste. Daher müssen Sie dem neuen ViewController im Storyboard ein Registerkartenelement hinzufügen. Sie können es programmatisch oder einfach grafisch machen. Drag/Drop eines neuen Tab Bar Items aus der Objektbibliothek unter dem ViewController (als Kind) – LombaX

Verwandte Themen