2010-05-17 20 views
10

Ho aggiunto una barra di navigazione a un UIViewController. Viene visualizzato solo da un altro UIViewController. Mi piacerebbe avere un pulsante sul lato sinistro posteriore che ha la forma simile a una freccia, proprio come il normale pulsante indietro della barra di navigazione. Sembra che posso aggiungere solo un pulsante bar attraverso IB. Suppongo che il pulsante Indietro debba essere aggiunto a livello di codice. Qualche suggerimento su come dovrei fare questo?Aggiunta del pulsante Indietro alla barra di navigazione

Attualmente, nel RootController, spingo un altro UIViewController (viewB) semplicemente facendo un addSubView. Nella visualizzazioneB, voglio visualizzare la barra di navigazione. L'app è basata sulla vista, non sul controller di navigazione.

risposta

13

Se si utilizza un controller di navigazione:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[[self navigationController] pushViewController:_myViewController animated:YES]; 
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.backBarButtonItem = _backButton; 
[_backButton release], _backButton = nil; 
[_myViewController release], _myViewController = nil; 

Se non si utilizza un controller di navigazione, esaminare i componenti Three20 style per fare pulsanti della barra personalizzata.

+0

Questo non sta facendo nulla. – 4thSpace

+0

Dovrai modificarlo sul codice del tuo particolare progetto. Potresti voler modificare la tua domanda per includere frammenti di codice rilevanti, dove ti trovi nel tuo primo controller di visualizzazione e spingi il tuo secondo controller di visualizzazione. –

+0

Ho aggiornato la domanda. Grazie. – 4thSpace

7

ho fatto seguente modo

In Metodo viewDidLoad ho questo codice:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)]; 
    navBar.delegate = self; 

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
    [navBar pushNavigationItem:backItem animated:NO]; 
    [backItem release]; 

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"]; 
    [navBar pushNavigationItem:topItem animated:NO]; 
    topItem.leftBarButtonItem = nil; 
    [topItem release]; 

    [self.view addSubview:navBar]; 
    [navBar release]; 

Quindi aggiungere conformità al protocollo UINavigationBarDelegate nell'intestazione e attuare il metodo delegato questo modo:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked 

    return NO; 
} 
+0

lo hai usato in qualsiasi app che hai inviato alla Apple? se sì, lo hanno approvato? – viplezer

+0

Sì, non ci sono API private utilizzate in questo approccio –

0

Un altro approccio per risolvere questo problema è impostare la proprietà items per la barra di navigazione invece di spingere gli elementi della barra in modo consecutivo in nav bar stack:

//Define myFrame based on your needs 
let navigationBar = UINavigationBar(frame: myFrame) 
let backItem = UINavigationItem(title: "Back") 
let topItem = UINavigationItem(title: "My Title") 
navigationBar.setItems([backItem,topItem], animated: false) 
Problemi correlati