web-dev-qa-db-de.com

So übergeben Sie Daten in seque ios5 storyboard an die Detailansicht

Ich erstelle eine App in ios5 mit Storyboards. Ich habe einen Tableviewcontroller, der in einen Navigationscontroller eingebettet ist, und wenn Sie auf die Zellen im Tableviewcontroller klicken, sollten einige Details zu diesem Zellthema an eine Detailansicht übergeben werden. Ich benutze eine Pliste, um die Tabellenansicht und die Detailansicht zu füllen. Ich habe dies ohne Storyboard gemacht, möchte aber lernen, Storyboard zu verwenden. Ich habe seque zu meiner Detailansicht vom tableviewcontroller.

Mein Code für das Seque ist:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"DetailViewControllerSeque"])
    {   DetailViewController *detailViewController = [segue destinationViewController];  
        NSString *path = [[NSBundle mainBundle] bundlePath];
        NSString *finalPath = [path stringByAppendingPathComponent:@"questList.plist"];
        NSArray *tempArray = [finalPath valueForKey:@"description"];
        NSString *descriptionString = [tempArray valueForKey:@"description"];
        detailViewController.detailDescriptionText.text = descriptionString;    
    }
}

Danke für jede Hilfe.

25
Catacomber

Ich hatte das gleiche Problem (aus Mangel an Erfahrung mit iOS5).

Es stellt sich heraus, dass dies eine Beispiel-App mit dem iOS5-SDK ist, die über eine Tabellensicht verfügt, in der beim Tippen auf eine Tabellenzelle Segues verwendet werden: "Simple Drill Down".

https://web.archive.org/web/20130513140140/http://developer.Apple.com:80/library/ios/#samplecode/SimpleDrillDown/Introduction/Intro.html

Sie legen das Segment in der Tabellenzelle fest und geben ihm in der Storyboard-Datei einen Namen.

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

    /*
     When a row is selected, the segue creates the detail view controller as the destination.
     Set the detail view controller's detail item to the item associated with the selected row.
     */
    if ([[segue identifier] isEqualToString:@"ShowSelectedPlay"]) {

        NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
        DetailViewController *detailViewController = [segue destinationViewController];
        detailViewController.play = [dataController objectInListAtIndex:selectedRowIndex.row];
    }
}
67
M. Bedi

Ich habe das gleiche Problem, habe Teile des Ray Wenderlich-Tutorials verfolgt und festgestellt, dass Sie Tabellenzelle und Strg-Drag in Ihren Viewcontroller auswählen müssen. Rufen Sie dann performSegueWithIdentifier in didSelectRowAtINdexPath auf.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [self performSegueWithIdentifier:@"mySegueId" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{   
        NSLog(@"prepareForSegue: %@", segue.identifier  );      
        if ([segue.identifier isEqualToString:@"mySegueId"])
        {
            DetailController *detailController = segue.destinationViewController;
            detailController.delegate = (id)self;
            detailController.selected = selectedRow;
        }   
}
12
neefje

Benötigen Sie keinen Anruf: [self performSegueWithIdentifier:@"mySegueId" sender:self];

sie können NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; verwenden, um Ihre ausgewählten Informationen in Ihrer - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{...}-Funktion abzurufen.

1
Sijiu

Versuchen Sie es auf diese Weise

Vorname Ihr Segment (von der Tabellenzelle zur Detailansicht). Dann

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


    if([segue.identifier isEqualToString:@"yourSegueName"]){

        DetailViewController * detailViewController =segue.destinationViewController;
        detailViewController =[self.yourTableViewDataArray objectAtIndex:[self.yourTableView indexPathForSelectedRow].row];

    }

}

Vergessen Sie nicht, Ihren SecondViewController/DetailViewController zu importieren

Ich habe das gleiche Problem und habe es noch nicht mit Storyboards gelöst. Ich denke jedoch, dass das Segue bei der Zelle beginnen sollte, nicht beim gesamten Tableview-Controller. Wenn Sie Prototypzellen verwenden, könnte dies funktionieren - aber ich kenne keine durch Code erstellten Zelltypen. Ich würde mich auch über jede Hilfe zu diesem Thema freuen.

Edit: Das Tutorial unter http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html weist darauf hin, dass keine separate Lösung vorhanden ist und Sie das noch tun müssen Übergang zur Detailansicht im Code. Ich weiß nicht, wie richtig das ist, aber ich mache es einfach so, bis mir jemand die reine Storyboarding/Segue-Lösung zeigt;).

0
morgler