0

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?

Antwort

1

Wenn es in ViewDidAppear funktioniert, könnten Sie ViewWillAppear versuchen. Im Allgemeinen habe ich noch nie einen UIToolbar-Satz als UIBarButtonItem gesehen, daher würde ich nicht unbedingt Standardverhalten erwarten. Lass mich wissen wie es geht.

+0

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

+0

seltsam. vielleicht können Sie in viewWillAppear setNeedsDisplay auf der Symbolleiste aufrufen ... oder es sogar in viewWillAppear hinzufügen und in viewWillDisappear entfernen. – kevboh

0

Apple-UI-APIs oft nicht auf ungewöhnliche Weise, wenn Sie versuchen, etwas zu tun noch etwas ungewöhnlichen (auch Dinge, die sollte Arbeit), und versucht, eine UIToolbar in eine rightBarButtonItem einfügen definitiv fallen in meine Definition von „ungewöhnlich“.

Was Sie wirklich tun sollten, ist das Ausblenden der Navigationsleiste und das Hinzufügen der UIToolbar als Unteransicht der Hauptansicht Ihres View-Controllers. Alternativ können Sie UIToolbar komplett umgehen und die Schaltflächen in einer benutzerdefinierten Ansicht implementieren.

Verwandte Themen