举例浅淡Block链式编程

一. 简述

在项目中, Block的链式编程肯定是会用到的. 如一些框架等.
而对于项目中一些自定义的工具或view, 在以下情况时:

  • 1.可以包装完整
  • 2.有多个属性可以设置
  • 3.在项目中多处被用到

最好实现Block的链式编程, 如此对团队非常有好处.
注: block的链式, 即block有返回值, 且返回当前对象

二.举例

项目中需要自定义UINavigationBar, 符合上述3个条件.

  • 1.设置只读的, 有返回值的block属性
/** 设置下划线 */
@property (nonatomic, copy, readonly) YHNavigationBarView *(^setupUnderline)(void);

///左按钮图片
@property (nonatomic, copy, readonly) YHNavigationBarView *(^leftBtnImage)(UIImage *image);
///左按钮标题
@property (nonatomic, copy, readonly) YHNavigationBarView *(^leftBtnTitle)(NSString *title);
///右按钮图片
@property (nonatomic, copy, readonly) YHNavigationBarView *(^rightBtnImage)(UIImage *image);
///右按钮标题
@property (nonatomic, copy, readonly) YHNavigationBarView *(^rightBtnTitle)(NSString *title);
///标题按钮图片
@property (nonatomic, copy, readonly) YHNavigationBarView *(^titleBtnImage)(UIImage *image);
///标题按钮的标题
@property (nonatomic, copy, readonly) YHNavigationBarView *(^titleBtnTitle)(NSString *title);
  • 2.重写getter
  • 2.1
///设置下划线
- (YHNavigationBarView *(^)(void))setupUnderline{
    return ^YHNavigationBarView *(void){
        
        //下划线
        UIView *underlineView = [UIView new];
        underlineView.backgroundColor = [UIColor colorWithHexString:@"#EEEEEE"];
        [self addSubview:underlineView];
        [underlineView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self);
            make.right.equalTo(self);
            make.bottom.equalTo(self);
            make.height.equalTo(@1);
        }];
        
        return self;
    };
}
  • 2.2
///左按钮图片
- (YHNavigationBarView *(^)(UIImage *))leftBtnImage{
    return ^YHNavigationBarView *(UIImage *image){
        
        [self.leftBtn setImage:image forState:UIControlStateNormal];
        return self;
    };
}

其它getter方法与以上两个方法类似, 就不浪费篇章了.

  • 3.调用
  • 3.1 eg1
self.navBar.setupLeftBackBtn(self, YHBackImgTypeBlack).setupUnderline().
    setupRightPlayBtn(self, nil, navBarplayBtn, ^{
        
        [UIViewController yh_fromCurrentShowingVcToDestionVc:[YHPlayMusicVc new]];
    });
  • 3.2 eg2
self.navBar.setupLeftBackBtn(self, YHBackImgTypeBlack).
    setupTitleBtn(nil, @"修改昵称", nil);
  • 3.3 注意循环引用
navBar.titleBtnAlpha(0).setupLeftBtn([UIImage imageNamed:@"nav_toolbar_back_white"], nil, ^{
        
        [weakSelf.navigationController popViewControllerAnimated:YES];
        
    }).setupRightBtn([UIImage imageNamed:@"nav_share_white"], nil, ^{
        
        [weakSelf navRightButtonClick];
        
    }).setupTitleBtn(nil, self.titleStr, nil);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI下拉刷新模糊效果A...
    袁俊亮技术博客阅读 12,004评论 9 105
  • 大一刚开学,我便已经有些厌倦,或者说,不安。 急吼吼地随着如潮般的人流,起床、吃饭、自习、上课……我在各色人等中渺...
    一天一千字阅读 361评论 0 0
  • 有些事情,在自己看来有意义就好了,无需去在意那些不肯定你付出的人。 ...
    穿毛裤的一七八阅读 441评论 0 1