2013-09-22 14 views
42

Ho solo bisogno di sapere come eseguire alcuni reindirizzamenti/passaggi 'condizionali' ad una vista. Ad esempio:Segmento condizionale tramite Storyboard

Se l'utente non ha ancora effettuato l'accesso, viene visualizzata una vista con il modulo di accesso. Ma se l'utente ha già effettuato l'accesso, vedrà la sua vista profilo.

Come rendere i passaggi condizionali come quello usando lo storyboard?

Grazie

risposta

68

Per i passaggi condizionali, non iniziare un passaggio da un pulsante come di consueto. Invece di che utilizzare le seguenti operazioni:

  1. Nella tua storyboad, avviare un segue direttamente dal controller della vista di origine al controller della vista di destinazione. Per fare ciò, è possibile trascinare l'icona del controller della vista di origine sulla barra appena sotto la vista del controller della vista di destinazione nell'area di disegno principale. Ricorda solo che devi connettere due controller di vista direttamente e non con alcun controllo.

  2. Immettere un identificatore di sequenza appropriato per questo seguito. Per esempio dire "conditionSegue"

  3. Ora, nel file di .m vostra fonte di vista del regolatore svolgere la sua condizione e chiamare -performSegueWithIdentifier:sender: metodo su "auto" come questo:

    -(void)loadDestinationVC{ 
        if(condition == YES){ 
    
         [self performSegueWithIdentifier:@"conditionSegue" sender:nil]; 
        } 
    } 
    

Spero ho fatta chiaro.

+0

E 'tuo funzionato per me, ho fatto un segue conditionall da un UITableViewCell, perché alcune cellule deve mostrare una certa visione e di altre cellule altro ... La cosa è che quando torno dal push segue ha perso la messa a fuoco e ripristinato la vista, non tornerà alla cella che ha avviato l'azione. Ho una vista tabella con un controllo segmentato in alto che cambia tra 2 origini dati. Se passo da una uitableviewcell con il secondo indice del controllo segmentato selezionato, quando torno dai successivi, avvia la vista con il primo indice sul controllo segmentato ... – fguespe

+0

@fguespe Stai chiedendo una soluzione al problema o è un commento generale. –

+0

sì, ho bisogno di una soluzione, ma ho avanzato un po 'e capisco non è colpa del seguito condizionale. per i normali successi succede a Il problema è il controllo segmentato che cerca l'indice quando ritorna ma mostra i primi dati del segmento. – fguespe

3

Si fanno i segues direttamente da un controller a un altro (o gli altri), e dare loro identificatori. Nel codice che chiami scegli tra segues a seconda delle tue condizioni e chiama performSegueWithIdentifier: mittente :.

14

credo che un approccio migliore, se si desidera utilizzare segues dai pulsanti sarebbe quella di utilizzare questo:

Innanzitutto creare un pulsante e utilizzare un segue per collegarlo a un'altra vista, dare a questo segue un nome

quindi utilizzare questo metodo nel file .m

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"SegueName"]) { 
     //Check if should make the segue 
     //if not do something 
     [self doSomething]; 
     //and return NO; 
     return NO; 
    } 
    return YES; 
    } 
+0

Se stai usando xcode 6 e non sei sicuro di quale tipo di sague usare, puoi usare "Mostra" saga sotto "Azione Saga". Inoltre, per dare un identificatore (nome) a Saga, selezionalo nello storyboard e inserisci il nome scelto nel campo "Identificatore" sotto l'ispettore "Attributi" (a destra) –

1

Crea segue "generico" di Ctrl trascinando l'icona View Controller in fondo alla destinazione. Questo seguito non sarà associato ad alcuna azione. Poi, nel codice dove mai l'evento sta usando il codice condizionale che si desidera attivare la segue, chiamare:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
6

In Swift si poteva fare: come @Gaurav Singh ha suggerito nella sua risposta

Passaggio 1: inserire un seguito da ViewControllerA a ViewControllerB. Il seguito dovrebbe iniziare da ViewControllerA stesso e non da alcun controllo (come Button) in esso.

Passaggio 2: Dai un identificatore univoco nello storyboard. Es: seageFromAtoB

Passaggio 3: nel ViewControllerforA.swift scrittura:

if(condition == true) { 
    self.performSegueWithIdentifier("seageFromAtoB", sender: self) 
} 

Se si sta eseguendo qualche compito in qualche altro Thread quindi utilizzando performSegueWithIdentifier può generare un'eccezione.

Se si ottiene questo errore, allora si dovrebbe usare:

if(condition==true){ 
     NSOperationQueue.mainQueue().addOperationWithBlock { 
      self.performSegueWithIdentifier("seageFromAtoB", sender: self) 
     } 
} 

Ciò eseguire il reindirizzamento segue nella principale Thread.

Spero che questo aiuto per chi cerca l'opzione Swift per

Problemi correlati