- 此问题在此处已有答案**:
10年前关闭了。
- 可能重复:**
Call Function in Underlying ViewController as Modal View Controller is Dismissed
我几乎什么都试过了。以下是我试过的:
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"Test");
}
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"Test");
}
-(void)viewDidLoad
{
NSLog(@"Test");
}
当模态视图控制器被关闭时,为什么这些在我的父视图控制器中都不起作用?我怎样才能让它起作用?
2条答案
按热度按时间fjaof16o1#
1.块
最简单的方法是使用回调函数
block
,如果你只有一个监听器(父视图控制器)对解除事件感兴趣,这是很好的,你甚至可以通过事件传递一些数据。在 * 主视图控制器. m * 中
在 * 第二视图控制器. h * 中
在 * 第二视图控制器. m * 中
1.代表团
Delegation
**是Apple推荐的模式:如果呈现的视图控制器必须将数据返回给呈现的视图控制器,请使用委托设计模式来简化传输。委托使在应用的不同部分重用视图控制器变得更加容易。通过委托,呈现的视图控制器存储对委托对象的引用,该对象实现来自正式协议的方法。当它收集结果时,所呈现的视图控制器调用其委托上的那些方法。在典型的实现中,所呈现的视图控制器使其自身成为其所呈现的视图控制器的委托。
在 * 主视图控制器. h * 中
在 * 第二视图控制器. h * 中
1.通知
另一个解决方案是发送一个
NSNotification
。这也是一个有效的方法,如果你只想 * 通知 * 解雇而不传递太多数据,这可能比委托更容易。但它的主要用例是当你想多个侦听器解雇事件(而不仅仅是父视图控制器)。但请确保总是在完成后将自己从 * NSNotificationCentre * 中删除!否则,即使在您被解除分配后,仍有被调用通知的风险。[编者注]
在 * 主视图控制器. m * 中
在 * 第二视图控制器. m * 中
jbose2ul2#
模态视图应该告诉它的父视图解除它,然后父视图会知道,因为它负责执行解除操作。
如果您创建一个新项目并选择
Utility Application
模板,就可以看到这样的示例。