Voglio creare una vista modale con la voce di navigazione (vista a destra sul mio screenshot) e voglio che abbia un 'pulsante indietro'. La mia app è l'applicazione TabBar e non voglio che questa vista abbia una barra delle schede, ma voglio caricare una vista precedente (vista a sinistra sul mio screenshot) con un andamento simile al tipo "push". Posso solo creare push follow per fornire la navigazione di destra indietro alla vista a sinistra, se è caricata come una vista modale, la barra di navigazione & di NavigationBar è sparita. Qualche soluzione alternativa per questo? Grazie in anticipo!Creare una vista modale con la barra di navigazione e il pulsante Indietro
risposta
Basta inserire una barra di navigazione nella nuova vista con una voce di pulsante della barra. Crea un'azione per l'elemento del pulsante della barra controllando il trascinamento dalla voce del pulsante della barra su .h del controller della vista. È quindi possibile utilizzare un metodo delegato e il protocollo di dire al primo controller quando è stato premuto il pulsante e farla utilizzare [self dismissModalViewControllerAnimated:YES];
Quindi nel tuo secondo punto di vista di creare un protocollo con un metodo fatto, in questo modo:
@protocol SecondViewControllerDelegate <NSObject>
-(void) done;
@end
@interface SecondViewController : UIViewController {
...
id delegate;
}
...
@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate;
-(IBAction)done:(id)sender; //this will be linked to your nav bar button.
@end
poi nella vostra azione dal pulsante di chiamata presente:
-(IBAction)done:(id)sender{
[self.delegate done];
}
il controller prima vista sarà necessario implementare il protocollo <SecondViewControllerDelegate>
quindi, nel primo controller della vista, configuralo come delegato per il secondo controller della vista prima di continuare.
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"])
{
SecondViewController *viewController = segue.destinationViewController;
viewController.delegate = self;
}
}
, infine, prendere la chiamata fatta dal delegato nel vostro primo controller di vista:
-(void) done
{
[self dismissModalViewControllerAnimated:YES];
}
Ecco come ho fatto. Se non hai molta esperienza con protocolli e delegati, all'inizio potrebbe sembrare strano, ma ha funzionato bene per me.
scusami se ci sono errori di battitura, ho digitato tutto da zero solo ora. –
Sarà necessario per avvolgere la destra del controller vista laterale mano in un nuovo controller di navigazione. In IB, selezionalo e scegli la voce di menu Editor -> Embed In -> Navigation Controller
e IB mostrerà una barra di navigazione che puoi personalizzare in base al tuo cuore.
Questo mi consente di presentarlo come una vista modale? –
Sì, davvero. Sull'iPad puoi avere questa vista più piccola e centralizzata. Devi implementare i tuoi pulsanti nella barra di navigazione per il licenziamento. – Mundi
Grazie. In iOS 7, se trascino la barra di navigazione, non funzionerà correttamente poiché lo sfondo della "barra del tempo", a differenza della barra di navigazione, non ha uno sfondo grigio. Ma questo metodo ha risolto il problema e sembra più elegante. –
Cosa c'è di sbagliato nel presentare una vista modale (sulla destra) e un pulsante indietro per chiuderla per tornare a UITableView che è mostrato a sinistra? – tarheel
Perché è un UIWebView con contenuti dinamici e voglio che il pulsante Indietro sia nella barra di navigazione –