10

Ich habe eine Anwendung, die auf einem UINavigationController ausgeführt wird. Jetzt möchte ich ein UIToolbar-Element am unteren Rand jedes Bildschirms hinzufügen. Die Symbolleiste unten sollte für den ViewController, der gerade angezeigt wird, angepasst werden können. Meine erste Idee war, einfach die Symbolleiste in die navigationController-Ansicht einzufügen und sie zu markieren. In der viewController dachte ich, dass ich dann in der Lage sein würde, das UIToolbar-Element abzurufen. Ich habe den folgenden Code:UIToolbar auf jeder Seite von UINavigationController

In meinem AppDelegate:

// Get instance of Toolbar (navController is an instance of UINavigationController and TOOLBAR_TAG a constant) 
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 440, 320, 40)]; 
toolbar.tag = TOOLBAR_TAG; 
[navController.view addSubview:toolbar]; 

In meinem Viewcontroller ich das versucht:

UIToolbar *toolbar = [self.navigationController.view viewWithTag:TOOLBAR_TAG]; 
toolbar.barStyle = UIBarStyleBlack; 

Doch das gibt mir eine Fehlermeldung, dass Toolbar in meinem Fall ist ein " UILayoutContainerView "Objekt, kein UIToolbar-Objekt. Daher scheint diese Idee eine Sackgasse zu sein.

Wie haben andere dieses Problem gelöst?

Antwort

40

UINavigationController verfügt bereits über eine Symbolleiste. Verwenden Sie einfach

[self.navigationController setToolbarHidden:NO]; 

in den obersten View-Controller und

[self setToolbarItems:items]; 

in allen View-Controller, wo Artikel ist ein NSArray jene Elemente der Symbolleiste des View-Controller.

EDIT: Warum Ihre Lösung nicht funktioniert: Ihre TOOLBAR_TAG ist wahrscheinlich nicht eindeutig, deshalb erhalten Sie eine andere Unteransicht. Aber wie gesagt, du solltest sowieso die mitgelieferte Toolbar benutzen.

+1

Wow, das ist ein Service, den ich nicht erwartet habe, ich habe sogar die Dokumentation gesucht, aber nicht gefunden. Sehr cool, danke! – Robin

+0

Gern geschehen. =) es ist in der UINavigationController Dokumentation, BTW: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/occ/instp/UINavigationController/toolbar –

+1

Sie können Ihre UINavigationController pushController-Methode überschreiben, um Kopieren/Einfügen zu vermeiden und die Symbolleistenelemente hier festzulegen. –

1

Um die untere Symbolleiste des UINavigationController anzuzeigen, können Sie auf das Kontrollkästchen "Symbolleiste anzeigen" klicken, das über den Inspektor mit ausgewähltem Objekt "Navigation Controller" erreichbar ist. Ich hoffe, dass dies helfen kann :)

0

Aus einer Design-Perspektive würde ich dies nicht empfehlen, wenn Sie nicht wissen, dass die Symbolleiste für jede Ansicht im Stapel vorhanden ist. In der Sekunde, in der Sie die Symbolleiste für verschiedene Ansichten im Stapel ausblenden/anzeigen, sehen Sie, dass diese Animation (die Werkzeugleiste gleitet mit Ansichten) nicht wie erwartet animiert.

Wenn Sie Symbolleisten für bestimmte Ansichten benötigen, fügen Sie sie in diese Ansichten ein, da die Symbolleiste kontextabhängig zur Ansicht ist, nicht zum Nav-Stack als Ganzes.