EDIT 2: Ich habe jetzt dieses Problem behoben. Ich war wie so ein eigenes Hintergrundbild für meine UINavigationBar Einstellung:Benutzerdefinierte UIToolbar in UINavigationController RightBarButtonItem verschwindet, wenn zurück zum Anzeigen
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NavigationBarBackground" ofType:@"png"]]];
[navBar addSubview:imgView];
[navBar sendSubviewToBack:imgView];
[imgView release];
, die für den ersten View-Controller auf den UINavigationController des View-Controller-Stack in Ordnung war, aber alle Unteransichten machten diesen Code erneut ausführen und Platzierung die benutzerdefinierten Hintergrund nach vorne.
Der Fix: Entfernen Sie einfach den gesamten Code für den benutzerdefinierten Hintergrund auf dem Navigationscontroller, dann erstrecken sich die UINavigationBar Klasse in folgender Weise:
Erstellen Sie eine neue .h/.m-Datei UINavigationBar genannt + BenutzerdefiniertesBild Stellen Sie den .h Code:
@interface UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect;
@end
Und die .m zu:
#import "UINavigationBar+CustomImage.h"
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"NavigationBarBackground.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Und voila! Alles funktioniert jetzt gut.
--- END --- EDIT 2
I eine UINavigationController haben, die wie unten so bohrt:
HOMEPAGE > DETAIL PAGE > MAP VIEW
Die Detailseite fügt eine benutzerdefinierte UIToolbar (mit drei Knöpfen) zu die rightBarButtonItem innerhalb viewDidLoad etwa so:
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 1.0, 157.0, 44.1)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NavigationBarBackground" ofType:@"png"]]];
[tools addSubview:imgView];
[tools sendSubviewToBack:imgView];
[tools setTintColor:[UIColor colorWithRed:127/255.0 green:184/255.0 blue:72/255.0 alpha:1.0]];
[imgView release];
NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];
UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithTitle:@"Filter" style:UIBarButtonItemStyleBordered target:self action:NULL];
[buttons addObject:bi];
[bi release];
bi = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Map.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(showMap:)];
[buttons addObject:bi];
[bi release];
bi = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Favourite.png"] style:UIBarButtonItemStyleBordered target:self action:NULL];
[buttons addObject:bi];
[bi release];
[tools setItems:buttons animated:NO];
[buttons release];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];
die perfekt angezeigt wird, wenn die Detailansicht Seite sehen, und wenn ich Wenn Sie zur MAP VIEW wechseln, wird die benutzerdefinierte UIToolbar ausgeblendet (wie erwartet). Wenn Sie jedoch zur DETAIL VIEW zurückkehren, ist die benutzerdefinierte UIToolbar nicht mehr sichtbar. Es ist jedoch da, da ich immer noch den Bereich antippen kann, in dem die 'Map'-Schaltfläche sein sollte, und es bringt mich zurück zur MAP VIEW.
Wüssten Sie, wie ich diese UIToolbar wieder anzeigen lassen kann, wenn ich zurück zur DETAIL-Ansicht gehe?
Ich habe versucht, die benutzerdefinierte UIToolbar in viewWillAppear neu zu erstellen, die die gleichen Effekte wie oben hat.
BEARBEITEN - Dies funktioniert, wenn ich den Code, der die benutzerdefinierte UIToolbar erstellt innerhalb der ViewDidAppear-Methode erstellen. Ich mag diese Lösung jedoch nicht, da die Ansicht zurückgleitet, dann das benutzerdefinierte RightBarButtonItem erscheint. Hat das etwas damit zu tun, dass der Navigationscontroller vor der Anzeige der Seite nicht initialisiert wird?
nein viewWillAppear funktioniert nicht - die benutzerdefinierte Symbolleiste ist da, aber unsichtbar. Wenn ich darauf tippe, wo die Schaltflächen angezeigt wurden, funktioniert die Funktionalität immer noch (d. H. Die Methoden werden immer noch aufgerufen). – a1phanumeric
seltsam. vielleicht können Sie in viewWillAppear setNeedsDisplay auf der Symbolleiste aufrufen ... oder es sogar in viewWillAppear hinzufügen und in viewWillDisappear entfernen. – kevboh