如何将seque ios5 storyboard uitableview中的数据传递给详细视图

时间:2011-10-29 04:35:56

标签: iphone uitableview ios5

我正在使用故事板在ios5中创建一个应用程序。我有一个嵌入在导航控制器中的tableviewcontroller,当你点击tableviewcontroller中的单元格时,应该将有关该单元格主题的一些细节传递给详细视图。我使用plist来填充tableview和详细视图。我没有使用故事板就做到了这一点,但想学习如何使用故事板。我有一个seque从tableviewcontroller转到我的详细信息视图。

我的seque代码是:

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

感谢您的帮助。

5 个答案:

答案 0 :(得分:67)

我遇到了同样的问题(由于缺乏iOS5的经验)。

事实证明,这是一个iOS5 SDK的示例应用程序,它有一个表格视图,在点击表格单元格时使用segues:“Simple Drill Down”。

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

您可以在表格单元格中设置segue,并在故事板文件中为其命名。

- (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];
    }
}

答案 1 :(得分:12)

我遇到了同样的问题,遵循Ray Wenderlich教程的部分,发现你需要选择表格单元格并按Ctrl键拖动到你的viewcontroller。然后在performSegueWithIdentifier中拨打didSelectRowAtINdexPath

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

答案 2 :(得分:1)

不需要致电: [self performSegueWithIdentifier:@"mySegueId" sender:self];

您可以使用NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{...}函数中获取所选信息。

答案 3 :(得分:0)

我遇到了同样的问题,还没有用故事板解决它。但是,我认为segue应该从单元格开始,而不是整个tableviewcontroller。如果您使用原型单元格,这可能会起作用 - 但我不知道代码创建的单元格类型。我也非常感谢这个主题的任何帮助。

编辑: http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html上的教程表明不存在segue解决方案,您仍然需要在代码中转换到详细信息视图。我不知道这是多么正确,但我会这样做,直到有人向我展示纯粹的故事板/ segue解决方案;)。

答案 4 :(得分:0)

试试这种方式

名字你的segue(从tableview单元格到详细视图)。然后

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


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

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

    }

}

不要忘记导入SecondViewController / DetailViewController