2010-02-24 10 views

Antwort

17

Ich rang mit mehreren Ansätzen auf diesem einen und fand es schließlich mit Hilfe aller Antworten aus verschiedenen Quellen. Es gibt ein paar Tricks; Dieser Code-Schnipsel zeigt es alle (ich war eine benutzerdefinierte rightNavButton erstellen, aber Sie können dies für jede UIBarButtonItem leicht anpassen):

// Produces a nice "right arrow" style button that mirrors the back arrow 
// automatically added by the navController 
// 
UIImage *buttonImage = [UIImage imageNamed:@"forwardButton.png"]; 
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[forwardButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[forwardButton setTitle:@"Meter" forState:UIControlStateNormal]; 
forwardButton.font = [UIFont boldSystemFontOfSize:12]; 
forwardButton.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
[forwardButton addTarget:self action:@selector(showMeter) 
      forControlEvents:UIControlEventTouchUpInside]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
      initWithCustomView:forwardButton]; 

Hinweis: es stellt sich heraus, dass, wenn Sie versuchen, das Ziel und die Aktion direkt auf das setzen Button Element nach dem Zuweisen einer benutzerdefinierten Ansicht mit einem UIButton, dass es nicht dauern wird - Sie müssen das Ziel und die Aktion auf der Schaltfläche selbst festlegen - scheinbar verwendet die navBar die Schaltfläche wörtlich zur Verfügung gestellt.

Dies ist das Bild, das ich auf dem undurchsichtigen schwarzen navBar (Sie alles verwenden können, natürlich) wurde unter Verwendung: http://raretiger.com/images/forwardbutton.png

+3

Sie können Retina-kompatible, transparente Bilder hier herunterladen: [link] http://handleopenurl.com/assets/docs/arrow-buttons.zip [/ link] Der Zurück-Pfeil hat eine LeftCap von 15, die Vorwärts von 5 . (bei Tasten normaler Größe.) –

+2

Sie haben ein Speicherleck, in dem Sie 'UIBarButtonItem' 'retain +1' zuweisen und es dann der Eigenschaft' rightBarButtonItem' 'retain +1' zuweisen. Dies bedeutet, dass UIBarButtonItem jetzt eine Retain-Anzahl von 2 hat und niemals freigegeben wird. Sie müssen UIBarButtonItem automatisch freigeben: 'self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView: forwardButton] Autorelease];' – Camsoft

+1

Bild Links gegangen – Esqarrouth

4

Sie könnten eine UIImageView oder ein UIButton mit dem gewünschten Bild verwenden erstellen dann:

[[UIBarButtonItem alloc] initWithCustomView: arrowButton]; 

Hoffnung, das hilft.

7

Erstellen Sie einen benutzerdefinierten Hintergrund. Siehe Creating a left-arrow button (like UINavigationBar's "back" style) on a UIToolbar für wie.


Sie -pushNavigationItem:animated: können die integrierten Back-Taste erscheinen lassen, auch wenn Sie nicht benutzerdefinierte Aktionen zuordnen können.


Für undokumentierten Methoden, können Sie

UIButton* backButton = [UIButton buttonWithType:101]; 

verwenden, um eine Rück "Knopf" zu erstellen.

+0

Was ist der Zahlencode für einen nach vorne gerichteten Taste? – ma11hew28

+0

@Matt: Das ist kein integrierter Button-Typ. – kennytm

+5

Schneller Hack, ein bisschen zu spät: Ein Vorwärts-Button ist ein Zurück-Button mit einer transform = scale (-1,1) und dessen textLabel hat eine transform = scale (-1,1). – Cyrille

0

auf Idee @Plamen Dragozov fort: Ich habe bemerkt, wenn Sie die UIButton lassen, wie ist es würde beim Berühren eine Bildeinstellung auslösen, und das ist genau das Gegenteil, was eine normale Navigationstaste tut. Also, was ich getan habe, war "Hervorgehoben passt Bild" zu deaktivieren und es funktioniert wie ein Charme.

hoffe das hilft Neulingen wie mir.

0

elegantere Lösung:

UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 
[backButtonItem setBackgroundImage:[UIImage imageNamed:@"back.png"]  forState:UIControlStateNormal  barMetrics:UIBarMetricsDefault]; 
self.navigationItem.leftBarButtonItem = backButtonItem; 
0

Mein Problem der Zurück-Taste wurde die Umbenennung, die auf den gedrückten View-Controller angezeigt. Ich habe einen dreckigen Workaround gefunden und wenn Sie das nicht ideale Animationsproblem ignorieren, erhalten Sie eine Zurück-Schaltfläche mit dem gewünschten Titel.

Der Trick ist, den Titel des ersten VC in viewWillDisappear und neu eingestellt es natürlich in viewWillAppear

(Unnötig zu sagen, die standardmäßig zu ändern, wenn es keine leftBarButtonItem Menge, wird UINavigationController zeigen eine Rück Schaltfläche mit dem Titel des VC, die den aktuellen VC gedrückt)

In der VC, wo Sie Ihre aktuellen VC drücken, tun

-(void) viewWillDisappear:(BOOL) animated { 
    [super viewWillDisappear:animated]; 
    self.title = @"Back"; 
} 

-(void) viewWillAppear:(BOOL) animated { 
    [super viewWillAppear:animated]; 
    self.title = @"Original Title"; 
} 
Verwandte Themen