PrepareForSegue with UITableViewController - 传递数据
PrepareForSegue with UITableViewController - Pass data
我的代码有一个大问题。我的问题是,如何从用户点击的 tableviewcell 中获取数据到详细信息viewcontroller。
我已经从数组中获取数据并将其显示在我的表中viewcontroller,但是如何使用 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 将名称传递给详细信息 viewcontroller?怎么办?
希望你们能帮助我 - 我已经为此苦苦挣扎了一段时间:-(
当您单击一个单元格时。它将调用 didSelectRow
。在 didSelectRow
中保存 indexPath.row
并执行 performseguewithidentifier
现在 prepareForSegue
使用 meals[selectedIndex]
从数组中获取对象并分配给 detailViewController
Objects
.
确保 segue
是从 ViewController
到 ViewController
。
正如 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
}
最后,只需使用您的 Storyboard
(以及 select 您喜欢的任何演示和过渡风格)将 UITableViewCell
与 MyDetailViewController
连接起来
编辑 Swift 4
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let cell = sender as! UITableViewCell
let indexPath = self.tableView.indexPath(for: cell)
// Get the relevant detail
let meal = meals[indexPath!.row]
// Create reference and pass it
let detailViewController = segue.destination as! MyDetailViewController
detailViewController.mealName = meal.name
}
我的代码有一个大问题。我的问题是,如何从用户点击的 tableviewcell 中获取数据到详细信息viewcontroller。
我已经从数组中获取数据并将其显示在我的表中viewcontroller,但是如何使用 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 将名称传递给详细信息 viewcontroller?怎么办?
希望你们能帮助我 - 我已经为此苦苦挣扎了一段时间:-(
当您单击一个单元格时。它将调用 didSelectRow
。在 didSelectRow
中保存 indexPath.row
并执行 performseguewithidentifier
现在 prepareForSegue
使用 meals[selectedIndex]
从数组中获取对象并分配给 detailViewController
Objects
.
确保 segue
是从 ViewController
到 ViewController
。
正如 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
}
最后,只需使用您的 Storyboard
(以及 select 您喜欢的任何演示和过渡风格)将 UITableViewCell
与 MyDetailViewController
连接起来
编辑 Swift 4
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let cell = sender as! UITableViewCell
let indexPath = self.tableView.indexPath(for: cell)
// Get the relevant detail
let meal = meals[indexPath!.row]
// Create reference and pass it
let detailViewController = segue.destination as! MyDetailViewController
detailViewController.mealName = meal.name
}