...

DispenseNavigationBar (608345 byte)

by user

on
Category: Documents
28

views

Report

Comments

Transcript

DispenseNavigationBar (608345 byte)
Gestire la navigazione
Creare un’app multi Controller
 La quasi totalità delle app è suddivisa in più
ViewControllers, ognuno con specifiche funzionalità
 L’utente deve poter navigare fra i vari controller
secondo pattern ricorrenti e platform-specific:
 NavigationController : un ViewController finalizzato alla
gestione della navigazione fra le varie schermate.
 ViewController modali : interruzione del flusso di controllo
corrente per mostrare un differente controller.
Generalmente usato per ottenere informazioni dall’utente.
NavigationController
NavigationBar
Tasto back
NavigationItem
Navigation
controller
Titolo della schermata
precedente
Titolo della schermata
attuale
Top ViewController
NavigationController
La schermata precedente mostra alcune proprietà del
Navigation Controller
 NavigationBar : mostrata nella parte superiore dello
schermo, contiene il NavigationItem
 NavigationItem : presenta all’utente informazioni e
pulsanti per eseguire specifiche azioni.
 Tasto back : se premuto riporta l’utente alla schermata
precedente. Gestito direttamente dal sistema.
 RootController : è il controller principale, cioè quello
correntemente mostrato all’utente.
NavigationController
Il navigation controller gestisce tutti gli aspetti relativi alla
navigazione, cioè:
 Stack dei ViewController : mantiene l’elenco di tutti i
controllers mostrati precedentemente, per sapere a
quale tornare in caso di pressione del tasto back.
 Layout della Navigation Bar (colore della barra, colore
di titolo e bottoni).
 Animazioni e gesture
Usare il NavigationController
La figura mostra come inserire il
NavigationController nel nostro
progetto:
 Selezionare il Root View
Controller, cioè quello a partire
dal quale useremo il Navigation.
 Selezionare Editor > Embed in >
Navigation Controller
 Vedremo apparire magicamente
un nuovo Controller nello
Storyboard.
Configurare il
NavigationController
Selezionando il nuovo controller,
abbiamo la possibilità di
configurare alcuni aspetti:
 Indicare se la navigation bar e
la toolbar (un’ulteriore barra
che sarà mostrata in fondo alla
schermata) devono essere
mostrate.
 Indicare se, e con quali trigger,
nascondere le barre.
Configurare la NavigationBar
Selezionando la NavigationBar,
possiamo configurare il suo
aspetto grafico:
 Selezionare lo stile base
 Impostare il colore della barra
 Personalizzare il tasto back
 Personalizzare il testo relativo al
titolo
self.NavigationController
 Proprietà posseduta da ogni istanza di UIViewController
 E’ nil se il controller non si trova all’interno di un
navigation
 Espone i principali metodi per gestire la navigazione:
 pushViewController : naviga ad un nuovo controller
 popViewControllerAnimated : torna al controller precedente
 popToRootViewControllerAnimated : torna al primo
controller presente nello stack
 setNavigationBarHidden : indica se mostrare o nascondere
la barra di navigazione
Tutti i metodi richiedono il valore animated, che indica se deve
essere utilizzata o meno un’animazione
Creare un nuovo controller
A lato è riportata la sequenza
di operazioni per creare un
nuovo controller:
 Selezionare File > New >
File...
 Selezionare Cocoa Classe
 Inserire il nome del nuovo
controller ed impostarlo
come sottoclasse di
UIViewController.
Creare un nuovo controller
Una volta creato il file relativo tale controller, è necessario
crearlo anche nello storyboard
 Trascinare nello storyboard un nuovo oggetto di tipo
ViewController
 Indicare come classe, il file appena creato ed
assegnare uno StoryboardID univoco
Mostrare il nuovo controller
Per poter mostrare il nuovo controller, è necessario innanzitutto
istanziarlo:
 Accedere allo Storyboard tramite la proprietà, del
ViewController corrente, self.storyboard.
 Invocare il metodo
storyboard?.instantiateViewControllerWithIdentifier,
passando come parametro lo StoryboardID definito.
 Dato che il valore di ritorno è di tipo AnyObject, è necessario
forzare il downcast tramite l’operatore as.
A questo punto è sufficiente utilizzare i metodi del navigation
controller per gestire la transizione.
Usare i Segues
Oltre al meccanismo appena visto, iOS ci offre un’ulteriore
possibilità per gestire la transizione fra due controllers: i
segues.
I segues possono essere considerati come dei trigger
automatici, associati alla pressione di un determinato
bottone, che aprono automaticamente un nuovo controller.
Usare i Segues
Per inizializzare un nuovo segue dobbiamo associare al
trigger il nuovo ViewController da mostrare. E’ inoltre
necessario scegliere il tipo di segue.
I più utilizzati sono show (utilizza il navigation controller) e
present modally (mostra il nuovo controller in maniera
modale).
Intercettare i segue
Può capitare di aver la necessità di intercettare l’invocazione di
un segue, principalmente per passare un parametro al nuovo
controller.
 Sovrascrivere il metodo prepareForSegue(segue:
UIStoryboardSegue, sender: AnyObject?). Si tratta di un
metodo della classe UIViewController.
 Recuperare il controller di destinazione tramite la seguente
istruzione:
 var controllerToShow : SecondViewController =
segue.destinationViewController as! SecondViewController;
 Passare gli eventuali parametri al nuovo controller:
 controllerToShow.testo = "Segue!";
Button items
Oltre al tasto back, è possibile aggiungere dei bottoni
personalizzati alla barra.
 Inizializzare un nuovo UIBarButtonItem, passando come
parametri al costruttore
 Titolo o immagine da visualizzare
 Stile del bottone
 Target e action : specificano quale metodo di quale oggetto
dovrà gestire la pressione del tasto. Il primo è un oggetto,
mentre il secondo richiede semplicemente il nome del metodo.
 Aggiungere il bottone al navigation item:
 self.navigationItem.setRightBarButtonItem(button, animated:
false);
Controller modali
Come accennato, in alcuni casi può risultare utile aprire dei
ViewControllers modali. Generalmente usati per richiedere
operazioni da parte dell’utente, che restituiscono un risultato
(Ad esempio se l’utente deve selezionare la propria data di
nascita).
 Istanziare il nuovo controller normalmente.
 Sul controller chiamante è necessario invocare il metodo
presentViewController(controllerToShow, animated: true,
completion: (()->void)?)
 Dopo aver completato l’esecuzione, è necessario invocare,
sul controller modale, il metodo
dismissViewControllerAnimated(Bool);
Fly UP