A类:
(1)头文件声明
//声明协议MapViewControllerDelegate
@protocol MapViewControllerDelegate;
@interface MapViewController : UIViewController {
IBOutlet UIWebView *webView;
UIActivityIndicatorView *activityIndicatorView;
}
//该委托属性delegate主要是在现在的类中对其他类定义的接口方法进行调用
@property (nonatomic, assign) id <MapViewControllerDelegate> delegate;
@end
@protocol MapViewControllerDelegate
- (void)MapViewControllerDidFinish:(MapViewController *)controller;
@end
(2)实现代码
//实现属性
@implementation MapViewController
@synthesize delegate=_delegate;
//委托方法,注意属性可以用self.掉出,该处实际执行的就是B类的方法
- (IBAction)done:(id)sender
{
[self.delegate MapViewControllerDidFinish:self];//需要在主窗口mainviewController中实现
}
B类中得接口实现:
//声明调用该接口
@interface Gcmain : UIViewController<MapViewControllerDelegate> {
}
(2)实现代码
//直接实现该接口函数
- (void)MapViewControllerDidFinish:(MapViewController *)controller
{
[self dismissModalViewControllerAnimated:YES];
}
总结:实际上上边是一个子窗口中调用主窗口的方法,将自己销毁的一个例子。在一般的面向对象语言中,这一般就用子窗口的构造函数传入主窗口的实例,子窗口在退出时,先调用主窗口的方法显示主窗口并且销毁自己。在IOS中通过协议的方式,实际是反向操作,让父窗体接收协议,然后在父窗体中实现子窗体的生灭过程,感觉更自然一些。
所有要创建该子窗体的父窗体都需要接收该协议,受到委托才能开始创建该子窗体。