我创建了一个带有模态视图的应用程序,我可以显示然后解散。有没有一种简单的方法可以知道模态视图何时被解除?一旦模态视图被解除,我想在表中重新加载数据,并且不知道这样做的最佳方式。
由于
答案 0 :(得分:24)
建议的方法是使用模态视图控制器中的委托回到打开视图的视图控制器。查看官方文档以获取示例。
推荐使用这种方法的原因是最初启动模式的ViewController也可以控制它解除它。
与使用viewWillDisappear相比,这样做非常简单并且更加优雅 - 因为还有其他原因导致视图无法消失!
在你的模态ViewController上创建一个协议 - xViewControllerDelegate
@protocol xViewControllerDelegate
- (void) modalDialogFinished;
@end
然后在定义父视图控制器时,使用<xViewControllerDelegate>
让您的父实现委托。
您将被迫在父视图控制器中使用一个名为modalDialogFinished的方法 - 它可以处理dismiss命令和刷新等。
请记住将id<xViewControllerDelegate>
传递给初始化代码中的模态视图控制器,并将其作为字段存储在对象上。
当您想要忽略您的模态视图时,您只需要引用delegate.modalDialogFinished。
如果这没有意义,那么我可以向您指出一些更好的示例代码 - 但我希望使用代表对您来说并不陌生。
UPDATE ::
以下是关于如何为模态视图控制器执行此操作的官方Apple文档:
答案 1 :(得分:21)
UIViewController有一个名为parentViewController
的属性。在以模态方式呈现视图控制器的情况下,parentViewController
属性指向呈现模态视图控制器的视图控制器。
在您的模态视图控制器中,viewWillDisappear:
您可以向parentViewController
发送消息,以执行您希望执行的任何操作。
类似的东西:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.parentViewController doSomething];
}
如果您的父视图控制器是一个表视图控制器,那么您应该能够调用[self.parentViewController.tableView reloadData];
来完成您想要实现的目标。