我正在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但是当我运行我的程序时,我得到一个错误,其中包含我的标签意外发现的信息
答案 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.