delegate 也是用來解耦的, 他不再是簡簡單單讓目標去執行一個動作了,而是讓delegate去處理一些事件.
這跟在OC中學習的協議是一樣的, 分爲6步.
還是創建一個繼承於UIView 的 MyButton類.
MyButton.h代碼如下:
#import <UIKit/UIKit.h>
// 1.聲明一份協議
@protocol MyButtonDelegate <NSObject>
// 協議內容,即代理人需要做的事情:改顏色.
- (void)changeColor;
@end
@interface Mybutton : UIView
//2.設置代理人屬性
@property (nonatomic,assign)id<MyButtonDelegate>delegate;
@end
MyButton.m代碼如下:
#import "Mybutton.h"
@implementation Mybutton
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//3.設置代理人執行的方法.
[self.delegate changeColor];
}
@end
根視圖.m文件中代碼:
#import "MainViewController.h"
#import "Mybutton.h"
// 4. 引頭文件,籤協議
@interface MainViewController ()<MyButtonDelegate>
@end
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
Mybutton *mybutton = [[Mybutton alloc] initWithFrame:CGRectMake(270, 450, 50, 50)];
mybutton.backgroundColor = [UIColor orangeColor];
[self.view addSubview:mybutton];
[mybutton release];
//5.設置代理人
mybutton.delegate = self;
}
// 6.實現協議中的方法.
- (void)changeColor{
self.view.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:0.8];
}
效果如下圖顯示: