2013-10-31 17 views
16

Quando creo un pulsante di schiena, sto usando il seguente codice:Creare un costume terzino sinistro sul pulsante con la freccia UINavigationBar serie sulla sinistra

UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"Yeah" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressed:)]; 
self.navigationItem.leftBarButtonItem = leftButton; 

Questo funziona bene, ed io ottenere questo risultato :

enter image description here

vorrei avere lo stesso risultato, ma con una freccia sulla sinistra, come questo (quando si tratta di un pulsante standard indietro, non uno personalizzato):

enter image description here

Come posso semplicemente aggiungere questa freccia?

risposta

20

Infine, ecco il frammento di che uso per definire il titolo del pulsante indietro con lo standard sinistra freccia nella vista corrente, non nella vista padre:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self setTitle:@"Current View"]; 

    // Get the previous view controller 
    UIViewController *previousVC = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2]; 

    // Create a UIBarButtonItem 
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"FooBar" style:UIBarButtonItemStyleBordered target:self action:@selector(yourSelector)]; 

    // Associate the barButtonItem to the previous view 
    [previousVC.navigationItem setBackBarButtonItem:barButtonItem]; 
} 

Ecco il risultato:

enter image description here

Nota: Tuttavia, poiché non è possibile aggiungere un'azione su un oggetto BackBarButtonItem, è possibile fare riferimento a this great post se lo si desidera.

+1

Whoohoo! Non posso dirti da quanto tempo ho cercato questa soluzione ... Grazie. Funziona come un fascino ... – Stephan

+0

Ottima risposta !!! – Shashi3456643

0

bene è necessario andare su un'immagine di sfondo con e con titolo e

// Creates a back button instead of default behaviour (displaying title of previous screen) 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"] 
                   style:UIBarButtonItemStyleBordered 
                   target:self 
                   action:@selector(backAction)]; 

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton; 
[backButton release]; 
17

La cosa più semplice da fare sarebbe quella di impostare il titolo, nel controller genitore (cioè quella che si desidera nav di nuovo a). Se non vuoi che questo sia uguale al titolo attuale visualizzato nella visualizzazione di quel VC, puoi cambiare il titolo in viewWillDisappear a quello che vuoi sul pulsante indietro del prossimo VC, e poi cambiarlo di nuovo in quello che vuoi genitore in viewWillAppear.

Se si utilizzano gli storyboard, è anche possibile impostare il titolo posteriore direttamente in IB.

Infine, al fine di creare un pulsante indietro personalizzato, si può fare qualcosa di simile:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Details" style:UIBarButtonItemStyleBordered target:nil action:nil]; 

... tanto per essere sicuro di farlo in presentazione (o il genitore) controller della vista, non la vista controller in corso di caricamento (il controller presentato).

+0

ottimo! Grazie, Bladebunny. Guardando questo codice, è ovvio ... –

+0

Ci sono stato molte volte. Non picchiarti È un grande quadro e molto facile perdere l'ovvio. – Bladebunny

+5

Tuttavia, penso che sia utile specificare che è impossibile impostare un'azione quando si utilizza backBarButtonItem invece di leftBarButtonItem ... –

3
UIButton * backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[backButton addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setFrame:FRAME_DEFINE 
[backButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; 
[backButton setExclusiveTouch:YES]; 
[backButton setImage:[UIImage imageNamed:BACK_BUTTON_DEFAULT_ICON] forState:UIControlStateNormal]; 
[backButton setTitle:@"BACK" forState:UIControlStateNormal]; 
[backButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
UIBarButtonItem *backMenuBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
self.navigationItem.leftBarButtonItem = backMenuBarButton; 
+0

C'è un errore, @ "INDIETRO, ma la tua risposta mi ha aiutato .. –

0

io uso il codice come:

UIBarButtonItem *leftBar = [[UIBarButtonItem alloc] init]; 
leftBar.title = @"Back";//Details 
self.navigationController.navigationBar.topItem.backBarButtonItem = leftBar; 
0

Per Swift, con la risposta di Erzekiel come base per questo, è possibile semplificare al -

extension UIViewController { 

    func setBackButtonTitle(to title: String) { 
     let barButtonItem = UIBarButtonItem(title: title, style: .plain, target: self, action: nil) 
     self.navigationItem.backBarButtonItem = barButtonItem 
    } 
} 

Questo dovrebbe essere chiamato dal genitore viewController, es. in viewWillDisappear -

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.setBackButtonTitle(to: "Back")) 
}