2015-08-07 12 views

risposta

5

prepareForSegue prepara i dati da passare tra i controller della vista dove, come performSegue con identificatore, consente effettivamente il passaggio.

Da Apple Documentation:

  • Swift2:performSegueWithIdentifier(_:sender:)
  • Swift3:performSegue(withIdentifier: String, sender: Any?)

    Apps in genere non hanno bisogno di innescare segues di programmazione. Se è necessario , è possibile chiamare questo metodo per attivare un seguito per un'azione che non può essere espressa in un file storyboard, ad esempio una transizione tra scene in storyboard diversi.

    In genere, un evento viene attivato da un'azione dell'utente, ad esempio facendo clic sul pulsante . In Interface Builder, configurare un oggetto, ad esempio un controllo incorporato nella gerarchia di visualizzazione del controller della vista, per attivare il seguito .

  • Swift2:prepareForSegue(_:sender:)

  • Swift3:prepare(for: NSStoryboardSegue, sender: Any?)

    L'implementazione predefinita di questo metodo non fa nulla; è possibile modificare lo per passare i dati rilevanti al nuovo controller di visualizzazione o al controller della finestra , in base al contesto del seguito. L'oggetto seguito descrive la transizione e include riferimenti a entrambi i controller coinvolti nel seguito.

    I successivi possono essere attivati ​​da più origini, quindi utilizzare le informazioni nei parametri follow e mittente per distinguere tra i diversi percorsi logici nell'app. Ad esempio, se il seguito proviene da una vista tabella , il parametro del mittente identifica la cella su cui si è fatto clic sull'utente . È possibile utilizzare tali informazioni per impostare i dati sul controller della vista di destinazione .

0

Eseguire segue, in realtà cambia l'opinione che l'utente vede. La funzione Esegui segue chiamerà la funzione di preparazione dei passi prima che cambi la vista; così, in genere, gli sviluppatori passeranno le informazioni al prossimo controller all'interno di quella funzione prima che questo venga eseguito.

3

performSegueWithIdentifier solo racconta la viewController ciò che segue si' Mi piace seguire a. Puoi dare i nomi dei tuoi segui in Interface Builder.

[self performSegueWithIdentifier:@"GoToAnotherViewController" sender:self]; 

Si può avere un ViewController con diversi segues o si può avere qualcosa dagli attuali ViewController il destinationVC "ha bisogno di sapere" quando si segue, così you'd use prepareForSegue.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"GoToAnotherViewController"]) 
    { 
     // Get reference to the destination view controller 
     YourViewController *vc = [segue destinationViewController]; 

     // Pass any objects to the view controller here, like... 
     [vc setMyObjectHere:object]; 
    } 
} 
+0

Ho un campo di testo in "SecondViewController (YourViewController)" e voglio cambiare il testo del segnaposto e del frame. Come posso farlo? qualsiasi aiuto per favore. –

0

Swift 3 sintassi è: performSegue(withIdentifier: String, sender: Any?). È possibile farlo se si desidera solo per portare il viewController senza alcun pre - configurazione o conditons

È anche possibile fare prepare(for: NSStoryboardSegue, sender: Any?) che dà aggiuntivi caratteristiche:

  • passaggio di dati in più alla vistaController
  • fare una dichiarazione if else in modo che il passaggio basato ad esempio passando schermata di login o registrati schermo

fondamentalmente: prepareForSegue prepara i dati al passato tra controllori vista dove come performSegue permette in realtà l'interruttore accada

1

C'è una differenza che non ho visto nelle risposte qui e può aiutare a chiarire.

Il performSegueWithIdentifier autorizza il codice mentre il prepareForSegue consenta all 'utente, ha bisogno di un azione dell'utente.

Supponiamo di avere un quiz con alcune domande e l'utente ha 30 secondi per rispondere a ciascuna di esse.

Quando l'utente fa clic su una delle risposte, verrà chiamato prepareForSegue. L'utente è responsabile qui.

D'altra parte, se l'utente non fa clic su nulla, ma i 30 secondi scadono, il TUO CODICE dovrebbe 'eseguire il seguito' automaticamente.

Ecco quando è necessario il performSegueWithIdentifier per eseguire il processo in modo programmatico. Il tuo codice è direttamente responsabile qui.

Spero che aiuti.