2012-07-01 15 views
11

Ecco il mio codice. Voglio mettere un pulsante Indietro sul rootviewController di apertura.Come mostrare il pulsante Indietro sul RootViewController di UINavigationController?

- (void)selectSurah:(id)sender { 

    SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil]; 
    [email protected]"Surah"; 

    s[email protected]"Back"; 

    UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:surahTableViewController]; 

    [self presentModalViewController:aNavigationController animated:YES]; 
} 
+0

Per tornare a dove? – jarryd

+2

La risposta è ovvia. tornare dove viene chiamato presentModalViewController. Vedi la risposta @Flex_Addicted di seguito. – shaikh

risposta

8

Io non credo che sia possibile far apparire il controller della vista radice dallo stack di navigazione, ma si può fingere con un UIButton aggiunto come la visualizzazione personalizzata di un UIBarButtonItem:

UIButton *b = [[UIButton alloc]initWithButtonType:UIButtonTypeCustom]; 
[b setImage:[UIImage imageNamed:@"BackImage.png"] forState:UIControlStateNormal]; 
[b addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 
self.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:b]; 

Un adeguato PSD di Gli elementi dell'interfaccia utente iOS possono essere trovati here.

+0

grazie per il link PSD. – shaikh

2

aspetto e il comportamento di un pulsante indietro in un UINavigationController si basa sull'interazione tra una pila di UINavigationControllers. Mettendo un pulsante indietro sul primo controller si rompe questa convenzione, non c'è nulla in cui tornare, ed è per questo che il tuo codice non funziona.

Avrai bisogno di aggiungere manualmente UIBarButtonItem al codice a barre titolo come:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 

Se veramente si vuole farlo sembrare come un pulsante indietro, è necessario creare manualmente l'UIBarButtonItem con un'immagine che rispecchia il pulsante posteriore.

Un altro suggerimento però, visto che sembra che tu stia tentando di usare un pulsante Indietro per chiudere un controller di visualizzazione modale, rimango con qualcosa di più convenzionale come un pulsante "Chiudi" o "Fine" per chiudere la vista modale controller. Un pulsante Indietro è davvero più appropriato per navigare in una pila di UINavigationControllers.

+1

+1 per il suggerimento dell'etichetta "Chiudi" o "Fatto". grazie – shaikh

4

Poiché il SurahTableViewController è un controller di visualizzazione radice in un controller di navigazione, non è possibile tornare alla radice perché ci si trova già. Dal momento che hai presentato lo modale da qualcos'altro, è necessario mettere un pulsante sulla barra di navigazione che ha un IBAction che chiama:

[self dismissModalViewControllerAnimated:YES]; 
5

Faizan,

Helium3 commento ha un senso.

Suppongo che il pulsante sia necessario per chiudere il controller presentato in modo modale, è vero? Corretto se ho torto

In tal caso, è sufficiente creare un nuovo UIBarButtonItem e impostare è un pulsante sinistro (o destro) per UINavigationControllernavigationItem. Per non interrompere l'incapsulamento, crealo nel metodo viewDidLoad per il tuo controller SurahTableViewController.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // make attention to memory leak if you don't use ARC!!! 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
      style:UIBarButtonItemStyleBordered 
      target:self 
      action:@selector(close:)]; 
} 

-(void)close:(id)sender 
{ 
    // to dismiss use dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion 
    // dismissModalViewControllerAnimated: is deprecated 

    [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"controller dismissed"); }]; 
} 
+0

questa è una risposta perfetta. funziona molto bene. – shaikh

+0

Ci scusiamo per resuscitare il dead (thread), ma solo una nota: dovresti aggiungere il pulsante a UIViewController che viene presentato in UINavigationController, non allo stesso UINavigationController! Questo mi ha fatto perdere un'ora circa :( – MacD

+0

@MadD Ci scusiamo per il ritardo.Che cosa vuoi dire? Il pulsante è collegato alla barra di navigazione.Perché non funziona per voi? Grazie in anticipo. –

Problemi correlati