iphone的跨类实现接口的特殊方式---protocol

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中通过协议的方式,实际是反向操作,让父窗体接收协议,然后在父窗体中实现子窗体的生灭过程,感觉更自然一些。

所有要创建该子窗体的父窗体都需要接收该协议,受到委托才能开始创建该子窗体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值