2015-03-17 7 views
7

Ich habe eine iOS-App entwickelt und hatte Probleme mit der Verwendung eines Bilds als Element der linken Leiste in der Navigationsleiste. Ich habe dies auf folgende Weise versucht:leftbarbuttonitem wird nicht in der Navigationsleiste angezeigt

UIImage *backButtonImage = [UIImage imageNamed:@"backbuttonCB"]; 
CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); 
UIButton *backButton = [[UIButton alloc] initWithFrame:buttonFrame]; 
[backButton setImage:backButtonImage forState:UIControlStateNormal]; 
UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton]; 
self.navigationItem.leftBarButtonItem = backBarButtonItem; 

Die Leiste Schaltfläche scheint nie während der Ausführung der App angezeigt.

Ich fuhr dann fort, diese andere Methode wie folgt zu versuchen.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backbuttonCB"] style:UIBarButtonItemStylePlain target:nil action:@selector(methodname)]; 

Diese Methode funktionierte tatsächlich. Das angezeigte Bild war jedoch blau getönt und sah nicht so aus, wie es gedacht war. Das Ändern der Tönungsfarbe dieses Bildes hat nicht geholfen.

Irgendeine Idee, wie ich dieses Problem lösen kann?

EDIT: Weitere Informationen, wenn es hilft. Dies ist die erste Ansicht im Navigationsstapel. Der Navigationsstapel wird modal angezeigt, d. H. Es gibt eine vorherige Ansichtssteuerung und es gibt einen modalen Übergang zwischen der vorherigen Ansichtssteuerung und der Navigationssteuerung. Dies ist die erste Ansicht im Navigationsstapel.

EDIT: DAS PROBLEM IST FIXED. Ich denke, es war ein Fehler in xcode, weil, als ich xcode neu startete und es mit einem tatsächlichen Gerät anstelle des Emulators testete, es gut funktionierte. Es scheint jedoch immer noch nicht auf einem Emulator zu funktionieren.

+0

Haben Sie versucht, das Hintergrundbild der Schaltfläche festzulegen? – Wain

+0

Sie sollten UIButton als 'UIButton * button = [UIButton buttonWithType: UIButtonTypeCustom] initialisieren;' Dann 'setFrame' und' setImage' –

+0

Beide Methoden haben nicht funktioniert. – sosale151

Antwort

0

Code Ersetzen Sie die Taste als customType wie folgt zu initialisieren:

UIImage *backButtonImage = [UIImage imageNamed:@"backButtonCB"]; 
    CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); 
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [backButton setFrame:buttonFrame]; 
    [backButton setImage:backButtonImage forState:UIControlStateNormal]; 
    UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton]; 
    self.navigationItem.leftBarButtonItem = backBarButtonItem; 

Hoffe, es hilft .... :)

+0

Versuchte es. Funktioniert nicht. – sosale151

+0

dann überprüfen Sie zuerst Ihre 'BackButtonImage' existieren oder nicht? –

+0

yeah .... überprüfen Sie sind die Eingabe der richtigen Bild Name, coz es funktioniert an meinem Ende –

5

Versuchen diesen Code zu verwenden,

self.navigationItem.hidesBackButton=YES; 

UIImage *buttonImage = [UIImage imageNamed:@"Back"]; 
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[aButton setImage:buttonImage forState:UIControlStateNormal]; 
aButton.frame = CGRectMake(0.0,0.0,buttonImage.size.width,buttonImage.size.height); 
[aButton addTarget:self action:@selector(backBtnTapped) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:aButton]; 
self.navigationItem.leftBarButtonItem = backButton; 
+0

was ist anders? –

+0

Perfekte Antwort! – Vignesh

+0

Funktioniert nicht für mich. Ich vermute, es hat etwas damit zu tun, dass der Navigationscontroller modal präsentiert wird. Ich habe mehr zu der Frage – sosale151

3

Ich hatte das gleiche Problem. Um die Taste zu sehen, hatte ich die Tönung Farbe zu ändern, hier ist der Code in Swift:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(image:UIImage.init(named: "btn_back_default")!, style:UIBarButtonItemStyle.Plain, target: self, action: Selector("back")) 
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor() 
12

Versuchen Sie leftBarButtonItem auf diese Weise einstellen. Während es modal präsentiert wird, taucht es nicht auf.

self.navigationController?.navigationBar.topItem.leftBarButtonItem =

+1

Du bist der Mann, danke. –

1

myButton.sizeToFit() Aufruf vor dem leftBarButtonItem Zuweisung hat mir geholfen.

let cancelButton = UIButton() 
    cancelButton.backgroundColor = .red 
    cancelButton.setTitle("Common/Cancel".localized, for: .normal) 
    cancelButton.sizeToFit() //!!! 
    let cancelBarButton = UIBarButtonItem(customView: cancelButton) 
    navigationItem.leftBarButtonItem = cancelBarButton 
+0

Mein leftBarButtonItem wurde nicht auf iOS10 und früher angezeigt. Ihre Lösung hat funktioniert, weil ich UIEdgeInset auf eine negative Zahl (für iOS11) gesetzt habe, die iOS10 nicht mochte. Vielen Dank. – yoshitech