2016-03-07 105 views
0

所以我想要做的就是通过didSelectRowAtIndexPath中的prepareForSegue方法的sender参数将一个对象从tableViewController发送到一个collectionViewController,但出于某种原因,在prepareForSegue之前,两次调用collectionViewController的viewDidLoad方法。下面是来自tableViewController相关代码:segue.destinationViewController在prepareForSegue()之前调用两次viewDidLoad()

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 
    } 
} 

加入一些下面的打印报表,之后是发生在序列:

  1. tableViewController的didSelectRowAtIndexPath方法被称为
  2. destinationViewController的(collectionViewController)viewDidLoad中被称为
  3. destinationViewController的(collectionViewController)viewDidLoad被再次调用
  4. tabl eViewController的prepareForSegue被称为

我不知道为什么会发生这种情况,将不胜感激任何帮助。

编辑 - 我用tableViewController替换了collectionViewController,并且一切似乎都正常,因此它可能与UICollectionViewController特别有关。

回答

0

从而进行两倍赛格瑞你必须把赛格瑞从细胞,而不是整个控制器

请采取赛格瑞从控制器然后尝试

OR

添加以下代码

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool { 
    return false; 
} 
+0

对不起,忘了提及 - 从viewController触发segue,以便发送者参数是设置“挑战”对象,而不是单元格也。所以那不是我害怕的。 –

+0

如果使用performSegueWithIdentifier,IIRC应该执行SegueWithIdentifier不会被调用。仍然给它一个镜头,它无济于事,无论如何。 –

+0

你能分享你的代码吗? – techloverr

0

@GerwazySokołowski

在故事板中检查你的xib文件。我认为你从按钮或任何其他视图链接segue。 segue应该设置为UIViewcontroller,那么你可以调用performSegueWithIdentifier

+0

Double-checked-segue绝对是由viewController本身触发的,而不是单元格或任何其他子视图。 –

相关问题