使用UITableViewController准备ForSegue - 传递数据

时间:2016-04-21 10:33:31

标签: ios swift uitableview tableviewcell

我的代码存在很大问题。我的问题是,如何从用户点击的详细视图控制器的tableviewcell中获取数据。

我已经从数组中获取数据并将其显示在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将名称传递给详细视图控制器?怎么办?

希望你们能帮助我 - 我一直在努力解决这个问题: - (

2 个答案:

答案 0 :(得分:2)

正如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

}

最后,只需使用UITableViewCellMyDetailViewController Storyboard联系(并选择您喜欢的任何演示文稿和过渡样式)

答案 1 :(得分:0)

单击一个单元格。它会调用didSelectRow。在didSelectRow中保存indexPath.row并执行performseguewithidentifier

现在在prepareForSegue中使用meals[selectedIndex]从数组中获取对象并分配给detailViewController Objects

确保segue来自ViewControllerViewController