我的最终目标是在传递变量时转到另一个视图控制器。
这是我的代码:
name
如您所见,我正在尝试将变量prepareForSegue
传递给函数func tableView
。正如我所说,我的最终目标是将变量传递给另一个视图控制器并打开该视图。
现在,prepareForSegue可以做到这一点,但我只需要传递的变量。也许有办法直接在{{1}}?
中做到这一点答案 0 :(得分:1)
将代码放入didSelectRowAtIndexPath方法中。将选定的indexPath保存到实例变量并调用您的segue。
在prepareForSegue中,使用保存的indexPath从模型中加载所需的字符串,并将其传递给目标VC(viewController)。
答案 1 :(得分:1)
var name: String?
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
name = arrDict[indexPath.row].valueForKey("name") as? String
performSegueWithIdentifier("SecondSegue", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if let viewController = segue.destinationViewController as? SecondViewController {
if name != nil {
viewController.passedVariable = name!
} else {
print("failed to get name from dictionary")
}
}
}
我相信这就是你要找的东西。不要在cellForRowAtIndexPath中分配变量名,因为在整个tableViews生命周期中通常会多次调用此函数。此外,“name”必须是一个类变量,以便您可以在一个函数中分配它并将其传递给另一个函数。 cellForRowAtIndexPath是一个用于分配tableView的每个单元格的值和UI的函数。很少有时间用它做任何其他事情。
答案 2 :(得分:0)
我还有另一种使用发件人的方式。在这种情况下,您可以避免使用全局变量
var paramToPass = val
保存在单元格类中。在sender
字段中,将发送者设置为yourCell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.performSegue(withIdentifier: "xxx", sender: partnerCell)
}
在prepareSegue函数中:
if segue.identifier == "xxx" {
guard let partnerCell = sender as? PartnerTableViewCell else {
return
}
yourDestinationController.param = partnerCell.paramToPass
}