第四十一篇、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;
};
}
第四十一篇、Masonry利用Block实现链式编程的更多相关文章
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- (一一八)利用block实现链式编程
有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写 ...
- AJ学IOS 之BLOCK的妙用_利用block实现链式编程
AJ分享,必须精品 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这 ...
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
- [Objective-C]用Block实现链式编程
看这篇博客时最快让你上手ReactiveCocoa之基础篇看到作者介绍链式编程那一块,发现自己的钻研精神不足.想想自己使用链式编程也有段时间了,对,就是 Masonry 库.自己一直享受点语法带来的效 ...
- 新浪微博客户端(63)-使用block进行链式编程
Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (Person *(^)())study ...
- ios的链式编程笔记
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数 > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...
- 模仿Masonry链式编程思想
使用masonry 也将近一年多了,它的链式编程方式一直是很吸引我的. 之前一直没空好好思考它是如何实现,直到现在正好自己有空,因此写下链式编程的基本思路. 链式基本的编程形式如 a.property ...
- iOS 链式编程探索(Masonry)
看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练. 我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出! 直接看代码吧!关键的注释都有. 我 ...
随机推荐
- mockjs学习总结(方便前端模拟数据,加快开发效率)
基本介绍: 在我们前端开发中经常遇到这样的事情,接口没有写好,只能写静态页面,如何才能用很简单的方法模拟后端数据呢?mockjs就干了这件事,而且干的还挺好. 下面是我作为初学者的一些总结经验,期 ...
- JQuery ajax请求一直返回Error(parsererror)
$.ajax({ type :"post", url :"busine_in.action", timeout : 40000, data: "cen ...
- python的一些总结1
1.安装环境 window用户下载 python :https://www.python.org/downloads/release/python-2710/ 安装不解释.. 配置环境变量 找到 P ...
- Codeforces Round #328 (Div. 2) B. The Monster and the Squirrel 打表数学
B. The Monster and the Squirrel Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/c ...
- DELPHI 多线程
效果不正确 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Control ...
- iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)
文件目录路径获取(Home目录,文档目录,缓存目录等) iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录: 1,Home ...
- [Effective C++ --033]避免遮掩继承而来的名称
这一章一直在想怎么写,因为比较基础,很容易理解,就按照需要来写吧. 假设我们有这样一个类: class Base { private: int x; public: ; virtual void mf ...
- C#的空接合运算符 三目运算符
1.空接合运算符:操作数1??操作数2: 2.第一个操作数必须是一个可空类型或引用类型,第二个操作数必须与第一个操作数类型相同,或者可以隐含的转换为第一个操作数的类型: 3.如果第一个操作数不为nul ...
- MySQL查询优化--细节理论
select的 high_priority还是比较有用,在实践中,平均5~6秒提高到3秒 ======================================================= ...
- 小白日记31:kali渗透测试之Web渗透-扫描工具-Arachni
扫描工具-Arachni Kali中集成旧的arachni的阉割版,所以需要重新安装[在某些方面有其独特性,但不算很强大,有命令行和web两种使用方式][匿名者推荐] apt-get update h ...