UI 04 代理設計模式

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];
}

效果如下圖顯示:
每點擊一次黃色的MyButton後,顏色就會改變
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章