Ios &引用;func Prepareforsgue“;不调用CollectionView

Ios &引用;func Prepareforsgue“;不调用CollectionView,ios,swift,storyboard,swift3,Ios,Swift,Storyboard,Swift3,是否可以使用shouldPerformSegueWithIdentifier通过以下方法捕捉segue的移动: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ } override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool 以下是我的视图控制器代码: f

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

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
}
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool
以下是我的视图控制器代码:

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;
            }
        }
    }
}
故事板序列参考

试试:

performSegueWithIdentifier("Identifier", sender: self)
而不是:

shouldPerformSegueWithIdentifier("Identifier", sender: self)
当我们使用shouldPerformSegueWithIdentifier时,我们可以通过以下方法捕捉segue的移动:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
}
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool

检查此链接:

您需要调用
performSegueWithIdentifier
而不是
shouldPerformSegueWithIdentifier
,因为
shouldPerformSegueWithIdentifier
方法为您提供了阻止segue发生的机会。从该方法返回NO会导致segue无法执行

如果您想了解有关
shouldPerformSegueWithIdentifier
的更多详细信息,请选中此项

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

因此,现在只需像这样调用
performsguewithidentifier
,而不是
shouldPerformSegueWithIdentifier

performSegueWithIdentifier("PokemonDetailVC", sender: poke)
在Swift 3.0中

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

没有
sender
是可以的,只需将方法更改为
performsguewithidentifier。