zoukankan      html  css  js  c++  java
  • 第四十一篇、Masonry利用Block实现链式编程

    一直都觉得使用Masonry的时候语法特别优雅,很早的时候就想尝试下怎么实现,

    一直都没弄明白,直到最近看见一篇叫block实现链式编程

    1.方法的返回类型是代码块

      >代码块的返回类型是该类的实例变量

      >在返回的代码块中,设置完相关的操作,并把实例对象返回

    使用实例:

     UIButton * btn = [UIButton button].normalTitle(@"普通状态").normalImage([UIImage imageNamed:@"icon_help"]).selectedTitle(@"选中状态");

    给系统的UIkit框架中的UIButton拓展分类

    /// 声明文件
    @interface UIButton (JQExtension)
    /// 连接符,没啥实际意义,蛋疼的时候可以无限.set....
    - (instancetype)set;
     
    + (instancetype)button;
    /// 设置普通状态标题
    - (UIButton *(^)(NSString *))normalTitle;
     
    /// 设置选中状态标题
    - (UIButton *(^)(NSString *))selectedTitle;
     
    /// 设置高亮状态标题
    - (UIButton *(^)(NSString *))highlightTitle;
     
    /// 设置普通状态图片
    - (UIButton *(^)(UIImage *))normalImage;
     
    /// 设置选中状态图片
    - (UIButton *(^)(UIImage *))selectedImage;
     
    /// 设置高亮状态图片
    - (UIButton *(^)(UIImage *))highlightedImage;
     
    /// 设置普通状态背景图片
    - (UIButton *(^)(UIImage *))normalBackgroundImage;
     
    /// 设置高亮状态背景图片
    - (UIButton *(^)(UIImage *))highlightedBackgroundImage;
     
    /// 设置选中状态背景图片
    - (UIButton *(^)(UIImage *))selectedBackgroundImage;
     
    @end
     
     
     
    实现文件
    #import "UIButton+GKExtension.h"
     
    @implementation UIButton (GKExtension)
    - (instancetype)set {
        return self;
    }
     
    + (instancetype)button {
        return [self buttonWithType:UIButtonTypeCustom];
    }
     
    - (UIButton *(^)(NSString *))normalTitle {
        return ^(NSString *title){
            [self setTitle:title forState:UIControlStateNormal];
            return self;
        };
    }
     
    - (UIButton *(^)(NSString *))selectedTitle {
        return ^(NSString *title){
            [self setTitle:title forState:UIControlStateNormal];
            return self;
        };
    }
     
    - (UIButton *(^)(NSString *))highlightTitle {
        return ^(NSString *title){
            [self setTitle:title forState:UIControlStateNormal];
            return self;
        };
    }
     
    - (UIButton *(^)(UIImage *))normalImage {
        return ^(UIImage *image){
            [self setImage:image forState:UIControlStateNormal];
            return self;
        };
    }
    - (UIButton *(^)(UIImage *))normalBackgroundImage {
        return ^(UIImage *image){
            [self setBackgroundImage:image forState:UIControlStateNormal];
            return self;
        };
    }
    - (UIButton *(^)(UIImage *))selectedImage {
        return ^(UIImage *image){
            [self setImage:image forState:UIControlStateSelected];
            return self;
        };
    }
     
    - (UIButton *(^)(UIImage *))selectedBackgroundImage {
        return ^(UIImage *image){
            [self setBackgroundImage:image forState:UIControlStateSelected];
            return self;
        };
    }
     
    - (UIButton *(^)(UIImage *))highlightedImage {
        return ^(UIImage *image){
            [self setImage:image forState:UIControlStateHighlighted];
            return self;
        };
    }
     
    - (UIButton *(^)(UIImage *))highlightedBackgroundImage {
        return ^(UIImage *image){
            [self setBackgroundImage:image forState:UIControlStateHighlighted];
            return self;
        };
    }
  • 相关阅读:
    图像特征工程
    神经网络在多分类上的应用——数据预处理
    Robotics Lab3 ——图像特征匹配、跟踪与相机运动估计
    Robotics Lab2——相机模型,点云图拼接与深度测量
    Robotics Lab1 —— 基于颜色特征的目标识别与追踪实验
    【Ubuntu16.04】解决Qt安装包(.run文件)不能用./命令执行的问题
    【ROS系统】创建消息(msg)后使用rosmsg命令报错的解决办法
    【ROS系统】执行roslaunch命令启动launch文件提示Invalid roslaunch XML syntax错误的解决办法
    【ROS系统】解决找不到用户工作空间下的程序包的问题——E:No such package
    【UEFI+GPT/BIOS+MBR】两种模式在Windows系统下安装Ubuntu系统
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5925515.html
Copyright © 2011-2022 走看看