在 View Dismissal 之前调用 Delegate 方法
Posted
技术标签:
【中文标题】在 View Dismissal 之前调用 Delegate 方法【英文标题】:Call Delegate Method Prior to View Dismissal 【发布时间】:2014-01-14 13:51:32 【问题描述】:我有一个模态视图控制器,在我关闭它之前,我需要调用一个委托方法来告诉父视图控制器更新。 (因为在关闭模态视图控制器时不会调用像 viewWillAppear
这样的方法)。
所以我的代码如下所示:
[delegate addEquipmentDidSave:YES];
[self dismissViewControllerAnimated:YES completion:nil];
非常简单。回个消息说,马上更新!然后只是关闭视图。然而,虽然这两行都被调用,但委托方法永远不会运行。所以我检查它设置的委托是否正确。当我呈现模态视图时,我设置了委托,因此它全部连接。
就好像委托方法在视图被关闭之前没有机会运行一样。这可能吗?您认为可能是什么问题?
谢谢。
【问题讨论】:
你在运行代码时检查了委托设置了吗? 如果委托相关的事情没问题,只需尝试关闭委托方法内的视图。? @C_X 为什么?什么时候已经有可以在dismissal方法中使用的完成块了? @Abizern 完成块将在视图关闭后运行,并且 josh 希望它应该首先更新视图然后关闭其他模式视图。这就是为什么我说要测试其他一切是否正常。 没有看到addEquipmentDidSave
的正文就不能准确地说,但我认为它没有更新,因为它在模态视图控制器的后台。
【参考方案1】:
在调用您的委托方法之前,首先检查它是否可用
if ([self.delegate respondsToSelector:@selector(addEquipmentDidSave:)] )
NSLog("Yes it's available");
[self.delegate addEquipmentDidSave:YES];
[self dismissViewControllerAnimated:YES completion:nil];
【讨论】:
我一直不知道如何使用respondsToSelector
,导致我遇到了问题!原来我是从两个地方展示模态视图。导致只有一项设置正确。【参考方案2】:
你看到最后一个参数,叫做completion
吗?在视图控制器关闭后调用该块。在那里做你想做的事。
【讨论】:
以上是关于在 View Dismissal 之前调用 Delegate 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在操作系统检测到它之前或之后检测到 Ctrl-Alt-Del?