【发布时间】:2016-06-20 21:26:36
【问题描述】:
所以我要做的是通过 didSelectRowAtIndexPath 中 prepareForSegue 方法的 sender 参数将对象从 tableViewController 发送到 collectionViewController,但由于某种原因,该 collectionViewController 的 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 的 didSelectRowAtIndexPath 被调用
- destinationViewController 的 (collectionViewController) viewDidLoad 被调用
- destinationViewController 的 (collectionViewController) viewDidLoad 再次被调用
- tableViewController 的 prepareForSegue 被调用
我不知道为什么会发生这种情况,不胜感激。
编辑 - 我用 tableViewController 替换了 collectionViewController,一切似乎都运行良好,因此它可能与 UICollectionViewController 相关。
【问题讨论】:
标签: ios iphone uiviewcontroller uistoryboardsegue