为什么在进行segue显示详细信息时会得到两个连续的viewcontrollers

时间:2018-10-18 00:26:11

标签: swift uicollectionview segue

当我单击uicollectionViewCell时,我来到一个为空的ViewController,稍后再创建一个新的ViewController,以正确显示数据。回头,我必须单击两次“后退”按钮以导航回原始viewController。在MainStoryboard中,实现了“显示详细信息” segue。这里发生了什么?我要检查什么?这是代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let cell = collectionView.cellForItem(at: indexPath) as! CollectionViewCell

    key = cell.keyImage.image

    performSegue(withIdentifier: "showKeyDetails", sender:self)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showKeyDetails"{
        if let destVC = segue.destination as? KeyDetailViewController{
            if key != nil{
                destVC.key = key
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您已从collectionView单元中连线。因此,当您选择单元格时,会触发segue,然后performSegue创建第二个segue。

要解决此问题,您可以:

  1. 删除performSegue调用,删除didSelectItem函数并更新prepare(for:sender:)函数以找到密钥:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showKeyDetails"{
            if let destVC = segue.destination as? KeyDetailViewController,
               let cell = sender as? CollectionViewCell,
               let key = cell.keyImage.image
            {
                destVC.key = key
            }
        }
    }
    

    或:

    2)从VC顶部的viewController图标而不是从单元格连接segue。