Domanda

Ciao, ho uno storyboard e sono in grado di mostrare una vista dettagliata quando faccio clic su una cella della tabella. Voglio aggiungere funzionalità extra in modo che a seconda della cella faccio clic un diverso controller di visualizzazione. Ho provato a trascinare due segue dalla stessa cella ma non lo permette.

Il mio pensiero era che avrei avuto due segui dalla cella che indicano una visione diversa e poi invocano il seguito desiderato:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSInteger row = indexPath.row;
    NSLog(@"Selected Item :-) %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:row]]);
    if(row %2 ==0){
        NSLog(@"Even");        
        [self performSegueWithIdentifier:@"ShowSecondIndex" sender:self];
    }else{
        [self performSegueWithIdentifier:@"ShowSelectedMovie" sender:self];
        NSLog(@"Odd");

    }

} 

Vorrei quindi gestire il seguito in preparatore

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    NSLog(@"Prepare For Segue ID:%@",[segue identifier]);

    if([[segue identifier] isEqualToString:@"ShowSelectedMovie"]){
        Tab2_ItemViewController *vc = [segue destinationViewController];
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
        NSLog(@"Selected Index: %d",selectedIndex);
        [vc setSelectedItem: [NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]];
        NSLog(@"String Value: %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]);
        [vc setSelectedIndex:selectedIndex];


    }else if([[segue identifier] isEqualToString:@"ShowSecondIndex"]){

        NSLog(@"Viewing Second Index");
    }

}

Tuttavia non mostra mai la seconda vista. È questo perché non è possibile avere due segues da una singola cella da tavolo. Ho anche provato a trascinare entrambi i seguosi dal controller a ciascuna destinazione anziché una dalla cella e uno dal controller ma non davanza senza fortuna ???

È stato utile?

Soluzione

Non cercare di collegare i segues a una tableviewcell in questo caso. Collegali al controller di visualizzazione stesso.

Altri suggerimenti

Non provare a creare più segue da un tablecell ad altri controller di visualizzazione, si desidera trascinare CTRL+dall'icona del controller di visualizzazione sotto il controller di visualizzazione nell'interfaccia dello storyboard con i ViewController a cui desideri seguire. Quindi ti permetterà di impostare più segues.

screenshot showing multiple segues

E poi per far funzionare effettivamente i segues, è necessario aggiungere identificatori alle stesse stelle, cosa che puoi fare facendo clic su di essi e quindi dandogli un nome nell'ispettore della proprietà:

giving segue an identifier

Quindi, per l'esempio di tabelloni, nel tuo UableViewDelegate, in

-tableView:didSelectRowAtIndexPath: 

Puoi usare

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

Per iniziare manualmente un seguito a seconda della tua logica di ciò che seguono dovrebbe essere scelto.

Ecco un codice di esempio dal mio progetto demo:

-         (void)tableView:(UITableView *)tableView
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *segueName = nil;

    if (type == kCore) {
        segueName = @"segue1";
    } else if (type == kStdlib) {
        segueName = @"segue2";
    }

    [self performSegueWithIdentifier: segueName sender: self];
}

type è una proprietà del controller di visualizzazione, che determina quale seguito dovrebbe essere eseguito.

Come diceva la risposta di cui sopra, la chiave è quella di creare Segue collegando due controller di visualizzazione.

In Swift 3.1, con un controllo del segmento di due stati

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var segue: String!
if selectedSegment == 0 {
    segue = "segue1"
} else  {
    segue = "segue2"
}
self.performSegue(withIdentifier: segue, sender: self)

}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top