"func prepareForSegue" 不调用 CollectionView

"func prepareForSegue" not calling for CollectionView

是否可以使用 shouldPerformSegueWithIdentifier 通过以下方法捕捉 segue 的移动:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
}

这是我的视图控制器代码:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    let poke:Pokemon!

    if inSearchMode {
        poke=filterPokemons[indexPath.row]
    } else {
        poke=pokemonlist[indexPath.row]
    }
    shouldPerformSegueWithIdentifier("PokemonDetailVC", sender: poke);
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "PokemonDetailVC" {
        if let detailVC = segue.destinationViewController as? PokemonDetailVC{
            if let poke = sender as? Pokemon {
                detailVC.pokemon=poke;
            }
        }
    }
}

故事板 segue 参考

尝试:

performSegueWithIdentifier("Identifier", sender: self)

而不是:

shouldPerformSegueWithIdentifier("Identifier", sender: self)

当我们使用shouldPerformSegueWithIdentifier时,我们可以通过以下方法捕捉segue的移动:

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool

检查此 link:Prevent segue in prepareForSegue method?

你需要调用 performSegueWithIdentifier 而不是 shouldPerformSegueWithIdentifier 因为 shouldPerformSegueWithIdentifier 方法让你有机会防止 segue 发生。从此方法返回 NO 会导致 segue 无法执行。

如果您想了解有关 shouldPerformSegueWithIdentifier 的更多详细信息,请查看此 apple documentation

其中 performSegueWithIdentifier 方法允许将数据从源视图控制器传递到目标视图控制器。

所以现在只需像这样调用 performSegueWithIdentifier 而不是 shouldPerformSegueWithIdentifier

performSegueWithIdentifier("PokemonDetailVC", sender: poke)

在Swift3.0

self.performSegue(withIdentifier: "PokemonDetailVC", sender: poke)