2016-04-21 89 views
0

我的代码有一个很大的问题。我的问题是,我怎样才能从用户点击到详细视图控制器的tableviewcell数据。PrepareForSegue with UITableViewController - 传递数据

我已经从数组中取出数据并将其显示在我的tableviewcontroller中,但是如何使用prepareForSegue将该数据传递给新的viewcontroller?

这是我在单元格中显示数据的代码。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    // Table view cells are reused and should be dequeued using a cell identifier. 
    let cellIdentifier = "MealTableViewCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MealTableViewCell 

    // Fetches the appropriate meal for the data source layout. 
    let meal = meals[indexPath.row] 

    cell.nameLabel.text = meal.name 
    cell.photoImageView.image = meal.photo 
    cell.descriptionLabel.text = meal.description 
    cell.servedWithLabel.text = meal.servedWith 

    return cell 
} 

的问题是,调用prepareForSegue的那个以外意味着我不能使用例如meal.name将名字传下去通过对细节视图 - 控制?该怎么办?

希望你们能帮助我 - 我一直在这个挣扎了一段时间:-(

回答

1

正如Arun指出的那样,您需要使用-prepareForSegue。这是我会怎么做的东西传递给您的详细视图控制器(说meal.name

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Use this to determine the selected index path. You can also store the selected index path in a variable using -didSelectRowAtIndexPath 
    let cell = sender as! UITableViewCell 
    let indexPath = self.tableView.indexPathForCell(cell) 

    // Get the relevant detail 
    let meal = meals[indexPath.row] 

    // Create reference and pass it 
    let detailViewController = segue.destinationViewController as! MyDetailViewController 
    detailViewController.mealName = meal.name 

} 

最终,只是用挂钩的UITableViewCellMyDetailViewControllerStoryboard(并选择你喜欢的任何陈述和过渡风格)

+0

很好,谢谢你帮助我! –

0

当您单击单元格它将调用didSelectRowdidSelectRow保存indexPath.rowperformseguewithidentifier

现在prepareForSegue使用meals[selectedIndex]得到数组对象,并分配给detailViewControllerObjects

确保segueViewControllerViewController