zoukankan      html  css  js  c++  java
  • objectivec 协议和委托(转)

    objective-c protocol delegate

    protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。
    delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。
    当一个A view 里面包含了B view
    b view需要修改a view界面,那么这个时候就需要用到委托了。
    需要几个步骤
    1。首先定一个协议
    2。a view实现协议中的方法
    3。b view设置一个委托变量
    4。把b view的委托变量设置成a view,意思就是 ,b view委托a view办事情。
    5。事件发生后,用委托变量调用a view中的协议方法
     
    例子:
    B_View.h:

    @protocol UIBViewDelegate <NSObject>

    @optional

    - (void)ontouch:(UIScrollView *)scrollView;//声明协议方法

    @end

    @interface BView : UIScrollView<UIScrollViewDelegate>

    {

    id< UIBViewDelegate > _touchdelegate;//设置委托变量

    }

    @property(nonatomic,assign) id< UIBViewDelegate > _touchdelegate; 

    @end

    B_View.mm:

    @synthesize _touchdelegate;

    - (id)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {

    // Initialization code

    _touchdelegate=nil;

    }

    return self;

    }

    - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event

    {

    [super touchesBegan:touches withEvent:event];

    if(_touchdelegate!=nil && [_touchdelegate respondsToSelector: @selector(ontouch:) ] == true)

    [_touchdelegate ontouch:self];//调用协议委托

    }

    @end
     
    A_View.h:

    @interface AViewController : UIViewController < UIBViewDelegate >

    {

    BView *m_BView;

    }

    @end

    A_View.mm:

    - (void)viewWillAppear:(BOOL)animated

    {

    m_BView._touchdelegate = self;//设置委托

    [self.view addSubview: m_BView];

    }

    - (void)ontouch:(UIScrollView *)scrollView

    {

       //实现协议

    }

  • 相关阅读:
    nginx设置屏蔽,可访问id的方法
    python实现rcp远程调用介绍
    0.0.0.0
    datetime 模块详解 -- 基本的日期和时间类型
    python函数——形参中的:*args和**kwargs
    时间加一天,一个小时得到新的时间
    good blog
    Python-第三方库requests详解
    python requests的content和text方法的区别
    MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
  • 原文地址:https://www.cnblogs.com/zhwl/p/2310073.html
Copyright © 2011-2022 走看看