如何在按下按钮时将表视图中单元格的索引从一个视图控制器传递到下一个视图控制器?

时间:2018-07-31 06:40:24

标签: swift uitableview uibutton

每次尝试执行以下操作时,它会将索引传递为0的索引传递给下一个视图控制器。我不确定自己做错了什么,有人可以帮忙吗?非常感谢!这是相关代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "a", for: indexPath) as! TableViewCell


    cell.useButton.tag = tagBaseValue + indexPath.row
    cell.useButton.addTarget(self, action: #selector(ListViewController.useButtonPressed(_:)), for: UIControlEvents.touchUpInside)

    return cell
}

@IBAction func useButtonPressed(_ sender: Any) {
    performSegue(withIdentifier: "toDisplay", sender: self)
}

func prepare(for segue: UIStoryboardSegue, sender: UIButton) {
    if segue.identifier == "toDisplay" {

        let nextVC = segue.destination as! NextVC

        nextVC.index = sender.tag

    }
}

2 个答案:

答案 0 :(得分:1)

prepare(for永远不会被调用,因为签名错误(sender的类型为Any?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toDisplay" {

        let nextVC = segue.destination as! NextVC
        nextVC.index = (sender as! UIButton).tag

    }
}

并且IBAction必须是

@IBAction func useButtonPressed(_ sender: UIButton) {
    performSegue(withIdentifier: "toDisplay", sender: sender)
}

答案 1 :(得分:0)

必须覆盖进行准备的过程,并且在发送发件人时按按钮操作,您正在发送自身,该自身指向viewcontroller本身,因此您始终将标记接收为0。

进行更改以准备segue,将发件人设置为Any,然后改写它。在调用performSegue的按钮动作中,请提及发送者为发送者(即按钮)而不是自身(即视图控制器)。

希望有帮助...