Dies ist , was ich zu erreichen versuchen: NB: Auch mit einem Titel an die Steuerung.Wie UINavigationBar Unterklasse korrekt auch Aussehen mit
Einige zusätzliche Informationen: -
- Diese Navigationsleiste wird auf rund 10 View-Controller erscheinen.
- Es ist nicht Teil eines Navigation Controllers, wie nicht erforderlich.
- Die Schaltfläche auf der linken Seite ist statisch (wird immer in der Navigationsleiste angezeigt).
- Der rechte Knopf ist nicht statisch und wird entweder nicht existieren oder unterschiedlich auf den verschiedenen View Controllern sein.
- Die linke Taste dient als Schiebe-Menü (das heißt Menü gleitet unterhalb von links)
- ich Storyboard im Setup bin mit
Frage Was ist der richtige Weg, dies zu erreichen?
Vorhandener Code Ich habe versucht, dies zu implementieren, aber ich kann nur die eine oder die andere der Tasten erhalten, ohne dass ein Titel funktioniert. Um den Hintergrund zu implementieren ich das Aussehen API verwendet, wie unten:
didFinishLaunching ...
// Custom Navigation Bar appearance setup
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,nil]];
// Used to deal with the rotation of the nav bar when implemented outside of Navigation Controller
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight];
[[UINavigationBar appearance] setContentMode:UIViewContentModeScaleAspectFit];
// Set the background image
UIImage *imageBg = [[UIImage imageNamed: @"mainNavBar"] resizableImageWithCapInsets:UIEdgeInsetsMake(0,5,0,5)];
[[UINavigationBar appearance] setBackgroundImage:imageBg forBarMetrics:UIBarMetricsDefault];
// Used to push the title down slightly when in Landscape and NavBar outside of Navigation Controller
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:2 forBarMetrics:UIBarMetricsLandscapePhone];
ich subclassed dann UINavigationBar für die linke Taste Schöpfung mit den folgenden: -Subklassen von UINavigationBar: awakeFromNib
UINavigationItem* ni = [[UINavigationItem alloc] init];
UIButton *leftButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 38.0f, 29.0f)];
[leftButton setImage:[UIImage imageNamed:@"menuBarItem"] forState:UIControlStateNormal];
[leftButton addTarget:nil action:@selector(menuItemPressed:) forControlEvents:UIControlEventTouchUpInside];
[leftButton setContentMode:UIViewContentModeScaleAspectFit];
[leftButton setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin];
UIBarButtonItem *b =[[UIBarButtonItem alloc] initWithCustomView:leftButton];
ni.leftBarButtonItem = b;
self.items = @[ni];
Dann innerhalb der Storyboard ich eine Navigationsleiste zu dem VC in Frage und Link hinzufügen in die richtige Unterklasse. Ich füge der Navigationsleiste im Storyboard für diesen Controller außerdem einen zusätzlichen Button hinzu und verknüpfe ihn mit einer Steckdose. Dann innerhalb des VC ich versuche, den Titel und die rechte Taste mit der unten zu aktualisieren:
-View-Controller, der die Unterklasse Navigationsleiste hält: viewDidLoad
// Set VC Title for NavBar
self.title = NSLocalizedString(@"NavBarHomeTitle", @"Navigation Bar - Home page title");
// Setup the right navigation bar item
UIImage *addImage = [UIImage imageNamed:@"addGameButton"];
UIButton *addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addButton setFrame:CGRectMake(0, 0, addImage.size.width, addImage.size.height)];
[addButton setBackgroundImage:addImage forState:UIControlStateNormal];
[addButton addTarget:self action:@selector(addGameButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.rightBarButtonItem setCustomView:addButton];
Das Ergebnis ist eine Navigationsleiste mit nur links Taste. Jetzt glaube ich, dass dies aufgrund des withoutFromNib-Codes oberhalb von alloc init ein neues UINavigationItem ist, daher kann ich den Titel nicht kontrollieren und einen Button hinzufügen. Wie kann ich das abschließen? Ist dies der beste Ansatz oder gibt es andere? Ich kann keine detaillierten Anleitungen darüber finden, wie ich das angehen kann.
danke, könnten Sie bitte ein wenig mehr Informationen darüber, wie dies zu erreichen, bitte? Ich verstehe die Unterklassen des Navigationscontrollers, aber ich bin mir nicht sicher, wie ich die Elemente zusammen mit '... einstellen kann, welche Rechte-Bar-Button-Elemente' ... für jede VC angeben? – StuartM
andere Informationen, die Sie bitte hier angeben könnten? – StuartM
Ich denke, das Problem bei dieser Route ist, dass ich ungefähr 10 View-Controller habe, die in ihren eigenen Navigation Controllern sein müssten? Oder meinst du, den einen Navigationscontroller zu haben und jedes Mal einen neuen Root View Controller zu pushen? – StuartM