zoukankan      html  css  js  c++  java
  • delegate设计模式

    delegate设计模式

    1.代理

    三方:委托方、代理方、协议

     2.定义协议

    协议:一堆方法的声明(面试题)

    #import <UIKit/UIKit.h>
    
    #warning 1.定义协议
    @class TouchView;
    @protocol TouchViewDelegate <NSObject>
    
    @optional
    // touchView开始被点击
    - (void)touchViewBeginTouched:(TouchView *)touchView;
    
    // touchView结束被点击
    - (void)touchViewEndTouched:(TouchView *)touchView;
    
    @end
    
    @interface TouchView : UIView
    
    #warning 2.给外界提供设置Delegate属性的接口
    // 在定义Delegate属性时,需要使用assign关键字,防止产生循环引用。
    @property(nonatomic, assign)id<TouchViewDelegate>delegate;
    
    @end
    

      

    #import "RootViewController.h"
    #import "TouchView.h"
    
    #warning 4.接受协议
    @interface RootViewController () <TouchViewDelegate>
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        TouchView *touchView = [[TouchView alloc] initWithFrame:CGRectMake(130, 100, 100, 100)];
        touchView.backgroundColor = [UIColor redColor];
        
    #warning 3.给Delegate属性赋值
        touchView.delegate = self;
        
        [self.view addSubview:touchView];
        [touchView release];
    }
    
    #warning 5.实现协议中的方法
    #pragma mark - TouchViewDelegate
    - (void)touchViewBeginTouched:(TouchView *)touchView
    {
        self.view.backgroundColor = [UIColor greenColor];
    }
    
    - (void)touchViewEndTouched:(TouchView *)touchView
    {
        touchView.backgroundColor = [UIColor colorWithRed:(arc4random() % 256 / 255.0) green:(arc4random() % 256 / 255.0) blue:(arc4random() % 256 / 255.0) alpha:1];
    }
    

      

    #import "TouchView.h"
    
    @implementation TouchView
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    #warning 6.在对应的时间点让Delegate去执行协议中对应的方法
        if (_delegate && [_delegate respondsToSelector:@selector(touchViewBeginTouched:)]) // 判断协议存在,且方法被实现了 
        {
            [_delegate touchViewBeginTouched:self];
        }
    }
    
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        if (_delegate && [_delegate respondsToSelector:@selector(touchViewEndTouched:)])
        {
            [_delegate touchViewEndTouched:self];
        }
    }
    

      

  • 相关阅读:
    西安.NET俱乐部群 推广代码
    跟我学Makefile(六)
    跟我学Makefile(五)
    跟我学Makefile(四)
    跟我学Makefile(三)
    跟我学Makefile(二)
    Kconfig文件说明2
    Kconfig文件说明
    kernel内核配置说明
    makefile中ifeq与ifneq dev/null和dev/zero简介 dd命令
  • 原文地址:https://www.cnblogs.com/sqdhy-zq/p/4764479.html
Copyright © 2011-2022 走看看