iOS Utilizzo di Segues (passaggio dei dati in avanti)


Esempio

Per passare i dati dal controller della vista corrente al nuovo controller della vista successivo (non un precedente controller della vista) usando segues, prima creare un seguito con un identificatore nello storyboard pertinente. Sostituisci il metodo prepareForSegue del tuo attuale controller di prepareForSegue . All'interno del metodo controlla il seguito appena creato dal suo identificatore. Trasmetti il ​​controller di visualizzazione di destinazione e passa i dati ad esso impostando le proprietà sul controller di visualizzazione downcast.

Impostazione di un identificatore per un seguito:

Ispettore degli attributi per un seguito

Le sequenze possono essere eseguite in modo programmatico o utilizzando l'evento dell'azione del pulsante impostato nello storyboard da ctrl + trascinamento al controller della vista di destinazione. È possibile chiamare un passaggio in modo programmatico, quando necessario, utilizzando l'identificatore dei passaggi nel controllore della vista:

Objective-C

- (void)showDetail {
    [self performSegueWithIdentifier:@"showDetailingSegue" sender:self];        
}

veloce

func showDetail() {
    self.performSegue(withIdentifier: "showDetailingSegue", sender: self)
}

È possibile configurare il payload dei passaggi nella versione sovrascritta del metodo prepareForSegue . È possibile impostare le proprietà richieste prima che il controller della vista di destinazione sia caricato.

Objective-C

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"showDetailingSegue"]){
        DetailViewController *controller = (DetailViewController *)segue.destinationViewController;
        controller.isDetailingEnabled = YES;
    }
}

veloce

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetailingSegue" {
        let controller = segue.destinationViewController as! DetailViewController
        controller.isDetailingEnabled = true
    }    
}

DetailViewController è il nome del secondo controller di visualizzazione e isDetailingEnabled è una variabile pubblica in tale controller di visualizzazione.

Per espandere questo modello, puoi trattare un metodo pubblico su DetailViewController come pseudo inizializzatore, per aiutare a inizializzare le variabili richieste. Questo documenterà automaticamente le variabili che devono essere impostate su DetailViewController senza dover leggere il suo codice sorgente. È anche un posto comodo per mettere le impostazioni predefinite.

Objective-C

- (void)initVC:(BOOL *)isDetailingEnabled {
    self.isDetailingEnabled = isDetailingEnabled
}

veloce

func initVC(isDetailingEnabled: Bool) {
    self.isDetailingEnabled = isDetailingEnabled
}