在iOS开发中经常会用到delegate,无论是视图、控件,还是不同页面之间传值等等。
通常,我们需要自定义delegate实现,以下简单介绍自定义delegate的步骤。
1.定义delegate的protocol文件
假如SettingsViewController类需要委托MainViewController类实现自身协议方法。
首先,在头文件SettingsViewController.h文件中添加如下内容:
// 声明协议名称和方法
@protocol buttonDelegate@required
-(void)settingsButtonTapped;
-(void)bookmarksButtonTapped;@optional
-(void)doubleClick;
-(void)fastForward;@end
// delegate属性
@property (assign, nonatomic)id<buttonDelegate>delegate;
@end
@protocl 后的MainViewDelegate则为自定义delegate名,受委托类需要引用该名字,其中@required标识其下面的函数定义为必须实现方法,类似c++中如果我们定义了纯需函数,则其子类必须定义纯虚函数内容。而@option则标识其下面的函数为可选实现方法,类似c++开发中的虚函数,其子类无需一定要定义虚函数的内容。
然后在触发的地方添加:
[delegate settingsButtonTapped];
[delegate bookmarksButtonTapped];
2.在受委托类的头文件MainViewController.h中定义
#import "SettingsViewController.h"
@interface MainViewController : UIViewController<buttonDelegate>
{
MainView *_contentView;SettingsViewController *_settingsViewController;
}
在类定义中使用“<>”符号作为deleate的名字。
3.最后在类的实现文件MainViewController.m中定义该delegate中必须定义的函数内容:
@implementation
- (void)viewDidLoad
{
_settingsViewController.delegate = self; // 设置委托对象,SettingsViewController委托MainViewController
}
// 实现委托方法
- (void)settingsButtonTapped
{
......
}
- (void)bookmarksButtonTapped
{
......
}
好了,自定义delegate就完成了.