Iphone 当模式视图被取消时的方法

Iphone 当模式视图被取消时的方法,iphone,model-view-controller,Iphone,Model View Controller,我已经创建了一个具有模式视图的应用程序,我可以显示它,然后关闭它。是否有一种简单的方法可以知道模态视图何时被取消?一旦模式视图被取消,我想在表中重新加载数据,但我不知道最好的方法 谢谢UIViewController有一个名为parentViewController的属性。在视图控制器以模态方式显示的情况下,parentViewController属性指向显示模态视图控制器的视图控制器 在模态视图控制器中,在视图中将消失:中,您可以向父视图控制器发送消息,以执行任何您希望执行的操作 比如: -

我已经创建了一个具有模式视图的应用程序,我可以显示它,然后关闭它。是否有一种简单的方法可以知道模态视图何时被取消?一旦模式视图被取消,我想在表中重新加载数据,但我不知道最好的方法


谢谢

UIViewController有一个名为
parentViewController
的属性。在视图控制器以模态方式显示的情况下,
parentViewController
属性指向显示模态视图控制器的视图控制器

在模态视图控制器中,在
视图中将消失:
中,您可以向
父视图控制器发送消息,以执行任何您希望执行的操作

比如:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.parentViewController doSomething];
}

如果父视图控制器是表视图控制器,则应该能够调用
[self.parentViewController.tableView reloadData]执行您试图实现的操作。

建议执行此操作的方法是使用来自模态视图控制器的委托返回到打开视图的视图控制器。查看官方文档以获取示例

推荐使用这种方式的原因是,最初启动该模式的ViewController也将控制取消该模式

这真的很简单,而且比使用viewwillbeside更优雅,因为还有其他原因导致viewwillbeside

在模态ViewController-xViewControllerDelegate上创建协议

@protocol xViewControllerDelegate

    - (void) modalDialogFinished;

@end
然后,在定义父视图控制器时,让父视图使用
实现委托

您将被迫在父视图控制器中拥有一个名为modalDialogFinished的方法,该方法可以处理dismise命令和刷新等

记住将
id
传递到init代码中的模态视图控制器中,并将其存储为对象上的字段

当您想要取消模式视图时,您只需要引用delegate.modalDialogFinished

如果这没有意义,那么我可以向您指出一些更好的示例代码——但我希望使用委托对您来说不是新鲜事

更新::

以下是有关如何为模态视图控制器执行此操作的Apple官方文档:


非常感谢您的快速回复,Jasarien,稍后会尝试一下。我尝试了这个,但发现了这个错误。我做错了吗?我在父视图中添加了一个名为“reloadData”的方法,然后在ViewWillEnglishe中调用它:[self.parentViewController reloadData]-[UITabBarController reloadData]:发送到实例0x4a215e0的无法识别的选择器“小心:VIEWWILLENAGE并不意味着模式被取消,它意味着它不再是用户所看到的。例如,如果模态被第二个模态覆盖,它也会触发。当第二个模态被解除时,原始模态仍然存在,并将收到第二个ViewDidAspect调用,等等。我一直在搜索一个信号,这确实意味着模态被解除,但我找不到一个信号。这不是打破了好的设计吗,因为现在家长认识孩子,孩子认识家长(应该避免后者)@Grouchal的回答似乎更具说服力,而应该是presentingViewController。这应该是最好的答案