如何将信息从一个视图控制器中的表视图单元传递到另一个视图控制器?

时间:2016-02-16 13:50:56

标签: ios iphone xcode swift ios9

所以,我有2个视图控制器:

  1. 一个表格视图控制器,其中包含可以按下的球杆名称列表。它有一个名为ClubsTableViewController的自定义类。
  2. 一个视图控制器,我将用它来显示被按下的球杆的描述。我想重新使用这个视图控制器来根据按下的任何一个俱乐部显示不同的信息。它有一个名为ClubDetailViewController的自定义类。
  3. Two view controllers 我在Table View Controller的每个Table View Cell和第二个View Controller之间创建了segues,每个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!]!
            }
        }
    }
    

    我使用此方法将从第一个视图控制器按下的球杆名称传递给第二个。上面的代码适用于表格视图的第一个单元格("国际特赦组织"在上图中)因为我已经给它标记1。

    但是,我想将任何按下的俱乐部的名称传递给第二个视图控制器,我不太清楚如何做到这一点。 任何帮助,将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:0)

请勿通过视图标记获取您的分会名称。

而是使用tableView.indexPathForSelectedRow.row来获取索引。 类似let clubName = clubNames[tableView.indexPathForSelectedRow.row]的东西,其中clubNames是带有俱乐部名称的数组。

修改:

我没有看到你使用的是静态细胞。 发件人是您的UITableViewCell,因此您可以通过这种方式获取标签。

let cell = sender as! UITableViewCell
let clubName = cell.textLabel.text

答案 1 :(得分:-1)

你的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获取你的俱乐部的索引,然后从阵列中正确发送俱乐部的名称。这意味着俱乐部名称必须在一个数组中(与俱乐部描述相同)。