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;
        };
    }
  • 相关阅读:
    生成函数学习笔记
    CF1437F Emotional Fishermen
    BZOJ 1443 [JSOI2009]游戏Game
    BZOJ 1018 [SHOI2008]堵塞的交通traffic
    访问量破1000之记录
    BZOJ 1022 [SHOI2008]小约翰的游戏John
    BZOJ1457 棋盘游戏
    BZOJ1874: [BeiJing2009 WinterCamp]取石子游戏
    BZOJ 1188 [HNOI2007]分裂游戏
    Codeforces Round #345 (Div. 2)
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5925515.html
Copyright © 2011-2022 走看看