Ios segue.destinationViewController的viewDidLoad()在prepareForSegue()之前调用了两次
因此,我试图通过didSelectRowAtIndexPath中prepareForSegue方法的sender参数将对象从tableViewController发送到collectionViewController,但由于某种原因,该collectionViewController的viewDidLoad方法在prepareForSegue之前被调用了两次。以下是tableViewController中的相关代码:Ios segue.destinationViewController的viewDidLoad()在prepareForSegue()之前调用了两次,ios,iphone,uiviewcontroller,uistoryboardsegue,Ios,Iphone,Uiviewcontroller,Uistoryboardsegue,因此,我试图通过didSelectRowAtIndexPath中prepareForSegue方法的sender参数将对象从tableViewController发送到collectionViewController,但由于某种原因,该collectionViewController的viewDidLoad方法在prepareForSegue之前被调用了两次。以下是tableViewController中的相关代码: override func tableView(tableView: UITa
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
}
}
在添加一组print语句后,将按顺序执行以下操作:
编辑-我用tableViewController替换了collectionViewController,一切似乎都很正常,因此它可能与UICollectionViewController特别相关。您必须从单元而不是整个控制器中获取分段,以便分段执行两次 请从控制器获取segue,然后重试 或 添加此代码
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
return false;
}
@格瓦齐·索科夫斯基
在故事板中检查您的xib文件。我想你从按钮或任何其他视图链接了segue。segue应使用UIViewcontroller设置,然后您可以调用PerformsgueWithIdentifier抱歉,忘记提及-segue是从viewController触发的,因此发送方参数是设置的“质询”对象,而不是单元格。恐怕不是这样。如果使用performsguewithidentifier,则不会调用IIRC shouldPerformSegueWithIdentifier。仍然给了它一个镜头,但它没有帮助,无论如何,谢谢。双重检查-segue最肯定是从viewController本身触发的,而不是单元格或任何其他子视图。