RAC 前篇--給Button 添加Block回調(diào)

Button是我們最常見(jiàn)的控件了下面看下常規(guī)用法

- (void)viewDidLoad { 

    [super viewDidLoad];

    [self createView];

    // Do any additional setup after loading the view.

}

- (void)createView{

  UIButton * mybutton = [UIButton buttonWithType:UIButtonTypeCustom];

    mybutton.frame=CGRectMake(50,300,40,20);

    [mybutton setTitle:@"test" forState:UIControlStateNormal];

    [mybutton setBackgroundColor:[UIColor orangeColor]];

    [mybutton addTarget:self action:@selector(dealButtonAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:mybutton];

}
//button點(diǎn)擊事件
-(void)dealButtonAction:(UIButton*)bu{

    NSLog(@"處理點(diǎn)擊事件");

}

每一個(gè)Button 都要對(duì)應(yīng)一個(gè)對(duì)應(yīng)的方法,如果有十個(gè)八個(gè)button的話那么創(chuàng)建十個(gè)八個(gè)方法的話,那的多亂,多么的難找
細(xì)想一下.如果Button 能這樣

    [mybutton addEventHandler:^{
         NSLog(@"處理點(diǎn)擊事件");
    } forControlEvents:UIControlEventTouchUpInside];

是不是很神奇

那怎么才能辦到呢

  1. button 添加了方法要用到分類
  2. button 新方法進(jìn)行了事件綁定用到了RunTimes
    話不多說(shuō) 上代碼
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
/** 事件回調(diào)的block */
typedef void (^UIButtonBlock) (void);

NS_ASSUME_NONNULL_BEGIN

@interface UIButton (block)

@property (nonatomic,copy)UIButtonBlock   touchAction;

- (void)addEventHandler:(void (^)(void))block forControlEvents:(UIControlEvents)controlEvents;

@end

//------- 漂亮的分割線 -------//

#import "UIButton+block.h"
@implementation UIButton (block)
//------- 添加屬性 -------//
static void *touchActionKey = &touchActionKey;
- (UIButtonBlock)touchAction{
    return objc_getAssociatedObject(self, &touchActionKey);
}
- (void)setTouchAction:(UIButtonBlock)touchAction{
    objc_setAssociatedObject(self, &touchActionKey, touchAction, OBJC_ASSOCIATION_COPY);
}
/**
 給按鈕綁定事件回調(diào)block
 @param block 回調(diào)的block
 @param controlEvents 回調(diào)block的事件
 */
- (void)addEventHandler:(void (^)(void))block forControlEvents:(UIControlEvents)controlEvents {
    self.touchAction = block;
    [self addTarget:self action:@selector(blcokButtonClicked) forControlEvents:controlEvents];
}
// 按鈕點(diǎn)擊
- (void)blcokButtonClicked {
    if (self.touchAction) {
        self.touchAction();
    }
}

button擴(kuò)展了一個(gè)帶block回調(diào)的方法,然后綁定了對(duì)應(yīng)的事件,就是有點(diǎn)復(fù)雜.
是不是很神奇 , 如果你感覺(jué)這樣很好玩,那么下面的一個(gè)叫RAC的東西,更方便更高效

pod導(dǎo)入

pod 'ReactiveObjC', '~> 3.0.0'

頭文件

#import <ReactiveObjC.h>

開(kāi)始用

   [[mybutton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
        NSLog(@"處理點(diǎn)擊事件");
    }];

是不是很簡(jiǎn)潔,那么下面請(qǐng)看

RAC初探

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市埂软,隨后出現(xiàn)的幾起案子毁葱,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翁涤,死亡現(xiàn)場(chǎng)離奇詭異形庭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)埋酬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)哨啃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人写妥,你說(shuō)我怎么就攤上這事拳球。” “怎么了珍特?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵祝峻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扎筒,道長(zhǎng)莱找,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任嗜桌,我火速辦了婚禮奥溺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骨宠。我一直安慰自己浮定,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布层亿。 她就那樣靜靜地躺著桦卒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匿又。 梳的紋絲不亂的頭發(fā)上方灾,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音琳省,去河邊找鬼迎吵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛针贬,可吹牛的內(nèi)容都是我干的击费。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼桦他,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔫巩!你這毒婦竟也來(lái)了谆棱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤圆仔,失蹤者是張志新(化名)和其女友劉穎垃瞧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體坪郭,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡个从,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歪沃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗦锐。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沪曙,靈堂內(nèi)的尸體忽然破棺而出奕污,到底是詐尸還是另有隱情,我是刑警寧澤液走,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布碳默,位于F島的核電站,受9級(jí)特大地震影響缘眶,放射性物質(zhì)發(fā)生泄漏嘱根。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一磅崭、第九天 我趴在偏房一處隱蔽的房頂上張望儿子。 院中可真熱鬧瓦哎,春花似錦砸喻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至犯助,卻和暖如春癣漆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剂买。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工惠爽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞬哼。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓婚肆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坐慰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子较性,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容