如何将信息从一个视图控制器中的 table 视图单元格传递到另一个视图控制器?
How do I pass information from a table view cell in one view controller to another view controller?
所以,我有 2 个视图控制器:
- 一个 Table 带有可以按下的俱乐部名称列表的视图控制器。它有一个名为 ClubsTableViewController.
的习俗 class
- 一个视图控制器,我将使用它来显示所按下的球杆的描述。我想重用这个视图控制器来根据按下的俱乐部显示不同的信息。它有一个名为 ClubDetailViewController 的自定义 class。
我在 Table View Controller 的每个 Table View Cell 和第二个 View Controller 之间创建了 segue,每个 segue 都有标识符 "showClubDetails".
我在 ClubsTableViewController.swift 文件中有以下方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showClubDetails" {
let detailsController = segue.destinationViewController as! ClubDetailViewController;
if let name = self.view.viewWithTag(1) as? UILabel {
detailsController.clubNameString = name.text!
detailsController.clubDescriptionString = clubDescriptions[name.text!]!
}
}
}
我使用此方法将按下的俱乐部名称从第一个视图控制器传递到第二个视图控制器。上面的代码适用于 Table 视图的第一个单元格(上图中的 "Amnesty International"),因为我给它设置了标签 1.
但是,我想将按下的任何俱乐部的名称传递给第二个视图控制器,但我不太确定如何执行此操作。
任何帮助,将不胜感激。
谢谢!
不要通过视图标签获取你的俱乐部名称。
而是使用tableView.indexPathForSelectedRow.row
来获取索引。
类似于 let clubName = clubNames[tableView.indexPathForSelectedRow.row]
,其中 clubNames 是包含俱乐部名称的数组。
编辑:
我没看到你在使用静态单元格。
发件人是您的 UITableViewCell,因此您可以通过这种方式获取标签。
let cell = sender as! UITableViewCell
let clubName = cell.textLabel.text
你的 segue 应该是这样的:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showClubDetails" {
let indexPath:NSIndexPath = tableView.indexPathForSelectedRow!
let detailsController = segue.destinationViewController as! ClubDetailViewController;
detailsController.clubNameString = names[indexPath.row]
detailsController.clubDescriptionString = clubDescriptions[indexPath.row]
}
}
编辑:
indexPath 获取俱乐部的索引,然后从数组中正确发送俱乐部名称。这意味着俱乐部名称必须在数组中(与俱乐部描述相同)。
所以,我有 2 个视图控制器:
- 一个 Table 带有可以按下的俱乐部名称列表的视图控制器。它有一个名为 ClubsTableViewController. 的习俗 class
- 一个视图控制器,我将使用它来显示所按下的球杆的描述。我想重用这个视图控制器来根据按下的俱乐部显示不同的信息。它有一个名为 ClubDetailViewController 的自定义 class。
我在 ClubsTableViewController.swift 文件中有以下方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showClubDetails" {
let detailsController = segue.destinationViewController as! ClubDetailViewController;
if let name = self.view.viewWithTag(1) as? UILabel {
detailsController.clubNameString = name.text!
detailsController.clubDescriptionString = clubDescriptions[name.text!]!
}
}
}
我使用此方法将按下的俱乐部名称从第一个视图控制器传递到第二个视图控制器。上面的代码适用于 Table 视图的第一个单元格(上图中的 "Amnesty International"),因为我给它设置了标签 1.
但是,我想将按下的任何俱乐部的名称传递给第二个视图控制器,但我不太确定如何执行此操作。 任何帮助,将不胜感激。 谢谢!
不要通过视图标签获取你的俱乐部名称。
而是使用tableView.indexPathForSelectedRow.row
来获取索引。
类似于 let clubName = clubNames[tableView.indexPathForSelectedRow.row]
,其中 clubNames 是包含俱乐部名称的数组。
编辑:
我没看到你在使用静态单元格。 发件人是您的 UITableViewCell,因此您可以通过这种方式获取标签。
let cell = sender as! UITableViewCell
let clubName = cell.textLabel.text
你的 segue 应该是这样的:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showClubDetails" {
let indexPath:NSIndexPath = tableView.indexPathForSelectedRow!
let detailsController = segue.destinationViewController as! ClubDetailViewController;
detailsController.clubNameString = names[indexPath.row]
detailsController.clubDescriptionString = clubDescriptions[indexPath.row]
}
}
编辑:
indexPath 获取俱乐部的索引,然后从数组中正确发送俱乐部名称。这意味着俱乐部名称必须在数组中(与俱乐部描述相同)。