我有一个基于视图的应用程序(不是导航或基于标签的...)
我的主视图控制器是从app委托调用的,并从xib启动。
然后我使用presentModalViewController通过它自己的xib和视图控制器在屏幕上显示另一个视图。
将数据传递给该视图控制器没有问题。
但是,当我关闭第二个视图控制器时,我想将数据发送回我的应用程序的主视图控制器,但我无法弄清楚如何引用它。实际上,如果可能的话,我想在主视图控制器中调用一个方法。
我一直在努力解决这个问题并在网上找到了建议,但我似乎无法让它发挥作用。我希望有人可以提供示例代码来执行此操作。
P.S。这个“主视图控制器”仍被称为“根视图控制器”,或者仅在处理视图控制器堆栈(即导航或制表视图控制器)时使用该术语
编辑: 我相信布莱恩的解决方案会有效,所以我接受了答案。然而,我最终使用NSNotificationCenter来实现这一点,我觉得作为初学者理解起来有点简单
答案 0 :(得分:2)
您可以使用委派模式。在模态视图控制器的头文件中,为新的委托协议创建一个接口...
@protocol ModalViewControllerDelegate <NSObject>
- (void)sendData:(Data *)someData;
@end
...并为您的ModalViewController
提供一个实现此协议的新实例变量:
@property (nonatomic, assign) id<ModalViewControllerDelegate> delegate;
您的主视图控制器应该实现此协议...
@interface MainViewController : UIViewController <ModalViewControllerDelegate> {
...并在呈现模态视图控制器之前将其自身设置为委托:
ModalViewController *modalViewController = [[[ModalViewController alloc] init] autorelease];
[modalViewController setDelegate:self];
// Present modal view controller
主视图控制器应该实现委托协议的方法:
- (void)sendData:(Data *)someData {
NSLog("I have just received some data: %@", someData);
}
然后在模态视图控制器中,只要想要将数据发送回主视图控制器,就可以调用以下方法:
[delegate sendData:someData];