将数据从tableview传递给视图控制器

时间:2016-09-25 18:16:42

标签: swift xcode tableview segue

我正在Swift中编写一个Xcode程序。我有一个tableview控制器,每个单元格有一些标签和图像。他们从第一个视图控制器获取数据。到现在为止还挺好。现在我希望用户点击一个单元格,该单元格打开一个新控制器,该控制器包含与单元格相同的标签和图像数据。使用以下代码打开新控制器,但我不知道如何传输数据。如果有人能帮助我,我会非常感激。

以下是我倾向使用的代码:

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


    let cellIdentifier = "TableView"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! TableView


    let picture = pic[indexPath.row]



    cell.label1.text = picture.name1
    cell.photoImage.image = picture.photo
    cell.label2.text = picture.name2


    return cell


}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {


    tableView.deselectRowAtIndexPath(indexPath, animated: true)


    let cell = indexPath.row

    self.performSegueWithIdentifier("segue", sender: cell)

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "segue"{

        var row = tableView.indexPathForSelectedRow

        let viewController = segue.destinationViewController as! vc2

    }

}

PS:我有一个从图像到新控制器的segue,标识符为“segue”。 PPS:当然我已经尝试了以下方法:Send data from TableView to DetailView Swift但是当我运行我的程序时,我得到一个错误,其中包含我的标签意外发现的信息

1 个答案:

答案 0 :(得分:0)

您不需要覆盖didSelectRowAtIndexPath或调用performSegueWithIdentifier来执行此操作。将您的segue连接到IB文件中,从表视图控制器的单元格拖动到第二个控制器。然后,您应该在segue.destinationViewController中的prepareForSegue中将数据传递给控制器​​。您在该目标控制器上设置公共属性。

还要确保原型单元格中的标签已在IB中连接。如果他们是他们,不应该是零。在cellForRowAtIndexPath上设置断点以验证这一点。

除非您在谈论目标控制器中的标签。这些也需要与IB联系起来。然后,您将在prepareForSegue中设置它们。您将从

中获取适当的数据
let viewController = segue.destinationViewController as! vc2
var path = tableView.indexPathForSelectedRow

viewController.destLabel.text = arrayData[path.row].myData // or whatever data you have from your model.