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

    //实现部分

    };

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

  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/liuguan/p/5047015.html
Copyright © 2011-2022 走看看