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 = ^{

    //实现部分

    };

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

  • 相关阅读:
    遗传算法优化BP神经网络——非线性函数拟合
    BP神经网络的数据分类——语音特征信号分类
    HTML5新特性
    HTML5——FileReader详解
    javaScript构造函数显式提供返回值
    react截图组件react-cropper的使用方法
    Ant Design of React的安装和使用方法
    flex布局
    CSS常用的元素居中方法
    javaScript异步编程
  • 原文地址:https://www.cnblogs.com/liuguan/p/5047015.html
Copyright © 2011-2022 走看看