2013-04-17 20 views
16

Ich bin eine benutzerdefinierte Leisten-Schaltflächen für UINavigationBar machen, ich folgenden CodeUIBarButtonItem benutzerdefinierte Ansicht in UINavigationBar

UIImageView *backImgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chk_back.png"]]; [backImgView setUserInteractionEnabled:YES]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backImgView]; 
[backButton setTarget:self]; 
[backButton setAction:@selector(BackBtn)]; 
checkIn_NavBar.topItem.leftBarButtonItem = backButton; 

Das Problem ist, es nicht seine Aktion aufruft. Was mache ich falsch?

+0

Kann ich auf Ihrer BackBtn-Methode sehen? – Arthur

+0

Was ist checkIn_NavBar? Hast du einen starken Bezug darauf? Warum nicht self.navigationItem.leftBarButtonItem verwenden? –

+0

versuchen und verwenden [checkIn_NavBar setLeftBarButtonItem: backButton]; oder self.navigationItem.leftBarButtonItem = backButton; – Bonnie

Antwort

37

Von Apple-Dokumentation:
ein neues Objekt Initialisiert Ansicht, die die angegebenen benutzerdefinierten verwenden.

- (id)initWithCustomView:(UIView *)customView 

Parameter Custom eine benutzerdefinierte Ansicht, die den Einzelteil. Rückgabewert Neu initialisierter Artikel mit den angegebenen Eigenschaften.

Diskussion: Das Balkenschaltelement, das von dieser Methode erstellt wird, ruft die Aktionsmethode seines Ziels als Reaktion auf Benutzerinteraktionen nicht auf. Stattdessen erwartet das Balkenschaltflächenelement, dass die angegebene benutzerdefinierte Ansicht alle Benutzerinteraktionen verarbeitet und eine entsprechende Antwort bereitstellt.

Lösung: "Erstellen Sie Schaltfläche mit Ihrem Hintergrundbild (Aktion auf diese Schaltfläche festlegen) und Initbar Schaltfläche mit dieser Schaltfläche". Zum Beispiel:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,25,25) 
[btn setBackgroundImage:[UIImage imageNamed:@"chk_back.png"] forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(BackBtn) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn]; 
+4

Gute Antwort, aber: Die Doku sagt: "Beim Erstellen einer benutzerdefinierten Schaltfläche - das ist eine Schaltfläche mit dem Typ UIButtonTypeCustom - ist der Rahmen der Schaltfläche zunächst auf (0, 0, 0, 0) gesetzt. Bevor Sie die Schaltfläche hinzufügen Ihrer Schnittstelle sollten Sie den Rahmen auf einen passenderen Wert aktualisieren. " Also solltest du definitiv den Rahmen des Buttons setzen, sonst wirst du nichts sehen! B v –

+0

@ ReinhardMänner - du hast mein lfe gerettet, Mann! Auch das ist ein schrecklicher Standardwert für einen Frame ... – katzenhut

+0

@katzenhut - froh, dass ich Ihnen helfen konnte, und Sie haben völlig Recht über den Standardwert ... –

1
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(graphButton)]; 
self.navigationItem.rightBarButtonItem = graphButton; 

- (void)graphButton{ 
} 
+0

Ergebnisse in zwei überlappenden Bildern – Hassy

+0

? Überlappend? Meinst du in der navigationBar rechten Seite gibt es schon Button? – brianLikeApple

+0

Löschen Sie Ihren Code und kopieren Sie meinen Code und ersetzen Sie den Button Bildname. Ändern Sie die Auswahlfunktion, wie immer Sie möchten. Es sollte funktionieren! – brianLikeApple

1

ich erreicht dies mit folgenden Code:

UIButton *nxtBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[nxtBtn setImage:[UIImage imageNamed:@"chk_next.png"] forState:UIControlStateNormal]; 
[nxtBtn addTarget:self action:@selector(NextBtn) forControlEvents:UIControlEventTouchUpInside]; 
[nxtBtn setFrame:CGRectMake(0, 0, 64, 31)]; 
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:nxtBtn]; 

checkIn_NavBar.topItem.rightBarButtonItem=nextButton; 
+1

So addieren Sie einen Knopf auf einen Knopf. Das klingt überhaupt nicht richtig. – Popeye

Verwandte Themen