zoukankan      html  css  js  c++  java
  • [ios]objective-c 协议和委托 (重点基础知识)

    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
    {
        //实现协议
    }
  • 相关阅读:
    STL之vector
    [洛谷P3942] 将军令
    [洛谷P2127] 序列排序
    [USACO07FEB]新牛棚Building A New Barn
    [洛谷P1120] 小木棍 [数据加强版]
    [洛谷P1438] 无聊的数列
    我的Emacs配置
    [CQOI2015]任务查询系统
    可持久化数组入门
    学习openstack(六)
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3193888.html
Copyright © 2011-2022 走看看