Ios 展开序列-动画完成时检测
我喜欢使用放松分段,但遇到了一个问题 我有一个父控制器(称之为Home),它以模式(称之为Detail)呈现一个子控制器 Detail controller有一个tableview,其中显示了一组核心数据实体,我有一个Delete按钮,点击该按钮时,我想删除所有这些实体,关闭模式,并更新home controller以显示实体已被删除 我第一次尝试使用Ios 展开序列-动画完成时检测,ios,core-data,tableview,modalviewcontroller,unwind-segue,Ios,Core Data,Tableview,Modalviewcontroller,Unwind Segue,我喜欢使用放松分段,但遇到了一个问题 我有一个父控制器(称之为Home),它以模式(称之为Detail)呈现一个子控制器 Detail controller有一个tableview,其中显示了一组核心数据实体,我有一个Delete按钮,点击该按钮时,我想删除所有这些实体,关闭模式,并更新home controller以显示实体已被删除 我第一次尝试使用self.context.deleteObject(entity),然后是一个展开序列,除非有足够多的实体,tableview可以快速滚动,并且在
self.context.deleteObject(entity)
,然后是一个展开序列,除非有足够多的实体,tableview可以快速滚动,并且在表格仍在减速时点击Delete按钮。导致崩溃的原因:(
据我所知,这是因为我刚刚删除了实体,但由于tableview仍在滚动(而Disclose动画正在完成),tableview尝试将即将出现的单元格(由于滚动),但由于不再有实体而崩溃
- 如果在模型视图被取消时调用viewDidAppear,我可以在那里更新Home(但它没有被调用)
- 如果在动画完成时调用了“展开”序列的结束,我可以在那里更新主页(但这并不是我所能找到的)
dismissViewControllerAnimated
并使用那里的闭包刷新主控制器
if let nc = self.presentingViewController as? UINavigationController, home = nc.topViewController as? HomeViewController {
self.dismissViewControllerAnimated(true, completion: { _ in
self.model.deleteEntities()
home.refresh()
})
}
这是可行的,但感觉不对(我猜是因为我觉得细节控制器必须了解主控制器是“不好的”)。有什么更好的方法的建议吗?在显示视图控制器的
视图中将消失:
,或者在显示视图控制器的视图中将出现:
,抓取self.transitionCoordinator
并调用notifyWhenInteractionEndsUsingBlock:
-在完成时将调用该块动画结束时,将从dismissViewController
锁定。“如果在模式视图被解除时调用ViewDidDisplay”它是被调用的,所以我不太明白有条件的…谢谢!notifyWhenInteractionEndsUsingBlock:
正是我想要的!我正在为segue设置它并使用展开。我也很惊讶视图会出现:
没有被调用,但我想这是因为我使用的是一个自定义的演示控制器,它没有被调用“但我认为这是因为我使用的是一个定制的演示控制器,它不会占用整个屏幕”,这就是原因——感谢您添加了这个细节。