所以我要做的是通过didSelectRowAtIndexPath中的prepareForSegue方法的sender参数将tableViewController中的对象发送到collectionViewController,但由于某种原因,该prepareViewController的viewDidLoad方法在prepareForSegue之前被调用两次。这是tableViewController中的相关代码:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let challenge = dataModel.challenges[indexPath.row]
performSegueWithIdentifier("ShowChallengeSegue", sender: challenge)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
...
else if segue.identifier == "ShowChallengeSegue" {
let controller = segue.destinationViewController as! ChallengeViewController
controller.challenge = sender as! Challenge
}
}
添加一堆打印语句后,按顺序发生以下情况:
我不知道为什么会这样,感谢任何帮助。
编辑 - 我用tableViewController替换了collectionViewController,一切似乎都运行正常,因此它可能与UICollectionViewController特别相关。
答案 0 :(得分:0)
你必须从细胞而不是整个控制器中取出segue,以便segue执行两次
请从Controller获取segue然后尝试
OR
添加此代码
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
return false;
}
答案 1 :(得分:0)
@GerwazySokołowski
检查故事板中的xib文件。我认为你从按钮或任何其他视图链接segue。应该使用UIViewcontroller设置segue,然后可以调用performSegueWithIdentifier