zoukankan      html  css  js  c++  java
  • IOS代理(初级)

    协议的作用以及协议的用法

    1.协议一般用作两个类之间的通信

    2.协议声明了一组所有类对象都可以实现的借口

    3.协议用@prltocol关键字声明 它本身不是类

    4.参与协议的两个对象,代理者和委托者

    5.代理,实现协议的某个方法,实现这个协议

    6.委托,用自己的方法指定要实现协议方法的对象(代理),代理来实现对应的方法

    7.@required---必须实现的方法  @optional---可以选择的方法  默认@required

    例子:

    这是一个简单的代理回调,包含传参

    // 非正式协议

    @protocol BCViewDelegate <NSObject>

    // 参数
    - (void)BCViewButtonDidClicked:(NSString *)text;

    @end

    委托类

    @interface BCView : UIView
    // 写属性代理                                                    
    @property(nonatomic,retain)id<BCViewDelegate>delegate;

    @end

    @implementation BCView

    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code
            [self addAllViews];
            
        }
        return self;
    }

    - (void)addAllViews
    {

        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        button.frame = CGRectMake(100, 100, 100, 40);
        // 绑定点击事件
        [button addTarget:self action:@selector(buttonDidClicked:) forControlEvents:UIControlEventTouchUpInside];
        
        [button setTitle:@"测试" forState:UIControlStateNormal];
        
        [self addSubview:button];
        
    }

    - (void)buttonDidClicked:(UIButton *)send
    {

        [self.delegate BCViewButtonDidClicked:@"杨过"];
        
    }

    @end
    代理类:
    @interface BCViewController ()<BCViewDelegate>
    @property(nonatomic,retain)BCView *rootView;
    @end

    @implementation BCViewController
    - (void)dealloc
    {
        [_rootView release];
        [super dealloc];
    }

    - (void)loadView
    {

        self.rootView = [[BCView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.view = self.rootView;
        [_rootView release];
    }

    - (void)viewDidLoad
    {
        [super viewDidLoad];
       
        self.rootView.delegate = self;
        
    }

    - (void)BCViewButtonDidClicked:(NSString *)text
    {
        NSLog(@"%@",text);

        NSLog(@"代理实现button点击");
    }
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
        if ([self isViewLoaded] && self.view.window == nil) {
            self.view = nil;
        }
    }

    @end

    两个类之间传值,可以用代理也可以不用代理(不实用),复杂的项目中,比如第三个类要得到协议方法的返回值,用代理会比较方便。

    可以把代理对象设置为自身,可以在自身中实现协议的方法

  • 相关阅读:
    Zend Studio使用
    iOS中block实现的探究
    用python演示一个简单的AST(抽象语法树)
    Cocos2D-x权威指南: CCNode类方法:
    ListView的优化
    可变參数
    android媒体--stagefright概述【一】
    flume安装及配置
    linux包之sysstat之mpstat与pidstat命令
    Java实现第十届蓝桥杯等差数列
  • 原文地址:https://www.cnblogs.com/bachl/p/4619571.html
Copyright © 2011-2022 走看看