从tableView传递变量到prepareForSegue?

时间:2016-07-23 01:14:36

标签: ios swift uitableview uiviewcontroller segue

我的最终目标是在传递变量时转到另一个视图控制器。

这是我的代码:

name

如您所见,我正在尝试将变量prepareForSegue传递给函数func tableView。正如我所说,我的最终目标是将变量传递给另一个视图控制器并打开该视图。

现在,prepareForSegue可以做到这一点,但我只需要传递的变量。也许有办法直接在{{1}}?

中做到这一点

3 个答案:

答案 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)

我还有另一种使用发件人的方式。在这种情况下,您可以避免使用全局变量

  1. 首先将var paramToPass = val保存在单元格类中。
  2. sender字段中,将发送者设置为yourCell

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.performSegue(withIdentifier: "xxx", sender: partnerCell) }

  3. 在prepareSegue函数中:

    if segue.identifier == "xxx" {
    
        guard let partnerCell = sender as? PartnerTableViewCell else {
            return
        }
    
        yourDestinationController.param = partnerCell.paramToPass
    
    }