zoukankan      html  css  js  c++  java
  • IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较

     //代码块与代替代理的设计方法

    我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比

    首先自定义了一个视图,上面有一个已经注册了得BUtton点击监控事件方法-(void)event{};视图的跳转就在这个方法中实现(注意:这个button不在视图控制器里面,就算导了相关头文件,也不能跳转,所以只能通过代理方法,或者代码块等,在这个button(在自定义控件空,非视图控制器)方法中调用相关方法,在视图控制器中去实现)

    代理实现方法:

    在.h文件中

       1,在这个自定义视图中(我再说一遍,这里不是视图控制器,要是视图控制器就不用这么折腾了),声明协议

       @protocol Delegate <NSObject>

       @optional
       - (void)jump;//一个用来视跳转的方法

       @end

       2,定义属性

       @property(nonatomic,weak)id<Delegate>delegate;//名字随便取,习惯用delegate(注意:<Delegate>是上面写的协议,只有这样delegate才便于调用jump方法)

    在.m文件中

    Button的监控方法-(void)event{};就在这里

    -(void)event{

    if (self.delegate && [self.delegate respondsToSelector:@selector(jump)])

        [self.delegate jump];//当Button按下就执行这里

    };//代理的定义就这样完成了!!!!!!

    视图的跳转的实现,我们放在了视图控制器中

    对上面的自定义视图进行实例化 通过   ***.delegate = self;(这里是使当前self与上面红色的标注的self.delegate指针一致,self.delegate调用jump方法,其实就是当前的self调用该方法)然后在jump方法中直接实现试图跳转就行了

    (其实讲到这里,就不用再讲了,因为后边的大家都知道了,大家需要的是上面代理定义处的东西)

    那么代码块如何实现了,其实比代理要简单些

    来个类型定义

    .h文件中

    1.typedef void (^block)();

    2.定义属性@property(nonatomic,string)block jump;//注意:不带*

    .m文件中

    3.-(void)event{

        self.jump();

    };//就这样定义结束了

    在视图控制器中的实现结构稍有区别

    ***.jump = ^{

    //实现部分

    };

    是不是代码块比代理简单啊

  • 相关阅读:
    AtCoder Grand Contest 031
    CF1010D Mars rover
    51Nod 1317 相似字符串对
    upd
    查漏补缺——字符串www.qq.com所有非空子串
    c语言查漏补缺——Win32环境下动态链接库(DLL)编程原理
    编程——二维矩阵中1所构成的块个数(孤岛问题)
    使用Windows自带远程桌面应用连接CentOS8远程桌面
    ZeroTier + NoMachine
    WinPE装入硬盘做应急系统教程
  • 原文地址:https://www.cnblogs.com/liuguan/p/5047015.html
Copyright © 2011-2022 走看看