Frage

Hallo, ich habe ein Storyboard und kann beim Klicken auf eine Tabellenzelle eine Detailansicht anzeigen. Ich möchte zusätzliche Funktionen hinzufügen, damit je nachdem, welche Zelle ich klicke, zeige ich einen anderen Ansichts -Controller. Ich habe versucht, zwei Segien aus derselben Zelle zu ziehen, aber es erlaubt es nicht.

Ich dachte, ich würde zwei Segale von der Zelle haben, die jeweils auf eine andere Sichtweise zeigten und dann den gewünschten Segue aufrufen:

- (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");

    }

} 

Ich würde dann mit dem Segue in Preporforsegue umgehen

- (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");
    }

}

Es zeigt jedoch nie die zweite Ansicht. Ist dies, weil es nicht möglich ist, zwei Segues aus einer einzelnen Tabellenzelle zu haben. Ich habe auch versucht, beide Segue von der Controller zu jedem Ziel zu ziehen und nicht von der Zelle und eines aus dem Controller, aber kein Glück ???

War es hilfreich?

Lösung

Versuchen Sie nicht, die Segues in diesem Fall an eine TableViewCell zu verbinden. Verbinden Sie sie an den View Controller selbst.

Andere Tipps

Versuchen Sie nicht, mehrere Segues von einer Tabelle zu anderen Ansichtscontrollern zu erstellen. Dann können Sie mehrere Segues einrichten.

screenshot showing multiple segues

Und dann müssen Sie den Segues selbst Kennungen hinzufügen, was Sie tun können, indem Sie auf sie klicken und ihm dann einen Namen im Eigenschaftsinspektor geben:

giving segue an identifier

Dann, zum Beispiel von Tabellen in Ihrem UitableViewDelegate, in

-tableView:didSelectRowAtIndexPath: 

Sie können verwenden

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

Um einen Übergang abhängig von Ihrer eigenen Logik dessen manuell zu starten, was ausgewählt werden soll.

Hier ist ein Beispielcode aus meinem Demo -Projekt:

-         (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 ist eine Eigenschaft von View Controller, die feststellt, welcher Segue durchgeführt werden soll.

Wie die obige Antwort sagte, besteht der Schlüssel darin, Segue zu erstellen, indem zwei Ansichtscontroller verknüpft werden.

In Swift 3.1 mit einer Segmentkontrolle von zwei Zuständen

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

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top