Swift 4 UITableViewCell第一次点击不会调用segue,第二次点击会使用第一个单元格数据调用segue

时间:2018-08-10 18:22:45

标签: ios swift uitableview

我在使用XIB文件的单元格的TableView遇到问题,当我第一次点击一个单元格时,它什么也没做,当我点击另一个单元格时,segue被调用了,但是带有第一个单元被点击。我在“ didDeselectRowAt” tableView函数上使用“ self.performSegue”。这是我的代码:

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
     _ = tableView.dequeueReusableCell(withIdentifier: "CardCell") as! CardTableViewCell?
     self.eachCard = cardsArray[indexPath.row]

     self.performSegue(withIdentifier: "showCard", sender: tableView)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let card = segue.destination as? SingleShotViewController
    if segue.identifier == "showCard" {
        card?.name = eachCard["name"] as! String
        card?.type = eachCard["type"] as! String
        if eachCard["imageUrl"] == nil {
            card?.imgURL = "http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=264373&type=card"
        } else {
        card?.imgURL = eachCard["imageUrl"] as! String
        }
    }
}

3 个答案:

答案 0 :(得分:0)

当您在表格视图中选择一个单元格时,首先将调用didSelectRow函数。再次点击它时,将调用didDeselectRow函数。 只需将功能更改为didSelectRow即可正常工作。

答案 1 :(得分:0)

仔细查看,您会发现自己使用的是“ didDeselectRowAt indexPath”,这是为什么在第二次触摸时要执行segue和委托,所以与其直接将“ didDeselectRowAt indexPath”更改为“ didSelectRow indexPath”,它将正常工作< / p>

答案 2 :(得分:0)

使用此重载代替didDeselectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        _ = tableView.dequeueReusableCell(withIdentifier: "CardCell") as! CardTableViewCell?
     self.eachCard = cardsArray[indexPath.row]

     self.performSegue(withIdentifier: "showCard", sender: tableView)
    }