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;
        };
    }
  • 相关阅读:
    LeetCode_35.搜索插入位置
    LeetCode_349.两个数组的交集
    LeetCode_344.反转字符串
    LeetCode_34.在排序数组中查找元素的第一个和最后一个位置
    LeetCode_303.区域和检索
    LeetCode_3.无重复字符的最长子串
    LeetCode_292.Nim 游戏
    LeetCode_283.移动零
    LeetCode_27.移除元素
    LeetCode_268.丢失的数字
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5925515.html
Copyright © 2011-2022 走看看