Latest 0.0.6
Homepage https://github.com/Phelthas/LXMBlockKit
License MIT
Platforms ios 7.0, requires ARC
Frameworks Foundation, UIKit
Authors

Some category adding block API for UIKit

UIButton 的target-action方法不能把回调方法跟配置方法写在一起,不利于代码阅读;而且target也基本都是所属的viewController,每次都addTarget:self也比较麻烦;就平常使用来说,button用的最多的也就是响应一下touchUpInside事件,所以封装一个用block回调点击事件的方法就能很好的应对日常的使用~
类似的情况还有UIBarButtonItem,UIGestureRecognizer,NSNotification等
所以就有了这个库

原来button事件的典型写法:

[testButton addTarget:self action:@selector(handleButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 

- (void)handleButtonTapped:(UIButton *)sender {    
    NSLog(@"handleButtonTapped");        
}

使用Block的写法:

   [testButton addButtonCallback:^(UIButton *sender) {
        NSLog(@"handleButtonTapped");
   }];

可以看出来还是省了很多代码的,而且事件的回调就写在button的配置处,不用来回找~~

需要注意的是:
__weak typeof(self) weakSelf = self;
block回调中,务必使用weakSelf!直接使用self必定会导致循环引用!!!
block回调中,务必使用weakSelf!直接使用self必定会导致循环引用!!!
block回调中,务必使用weakSelf!直接使用self必定会导致循环引用!!!
重要的事情说三遍!!!
这是所有block都需要注意的问题,没办法,只能自己在脑中时刻提醒自己注意,要不就跑Instruments测试吧~

其中NSNotificationCenter的部分,基本是照搬大神nicklockwood的FXNotifications;
研究了几个类似的可以autoRemove的notification的库,感觉还是FXNotifications最符合平时的场景,所以就按自己的代码习惯重新敲了一遍

有什么问题,欢迎讨论~

How to use

1, cocoaPods
在你的podfile中添加
pod 'LXMBlockKit', '~> 0.0.5'
run pod install or pod update
然后在需要的地方 #import "LXMBlockKit.h"就可以了

Update

0.0.6   加入NSTimer的block方法
0.0.5   加入nullable和nonnull等字段,方便swift调用
0.0.4   更新UIBarButtonItem方法
0.0.3 修复target为nil的bug

License

LXMBlockKit is provided under the MIT license. See LICENSE file for details.

Latest podspec

{
    "name": "LXMBlockKit",
    "version": "0.0.6",
    "summary": "LXMBlockKit",
    "description": "Some category adding block API for UIKit",
    "homepage": "https://github.com/Phelthas/LXMBlockKit",
    "license": "MIT",
    "authors": {
        "Phelthas": "https://github.com/Phelthas"
    },
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/Phelthas/LXMBlockKit.git",
        "tag": "0.0.6"
    },
    "source_files": "LXMBlockKitDemo/LXMBlockKit",
    "public_header_files": "LXMBlockKitDemo/LXMBlockKit/*.{h}",
    "frameworks": [
        "Foundation",
        "UIKit"
    ],
    "requires_arc": true
}

Pin It on Pinterest

Share This