首先真的真的很是感謝在Segmentfault上給我點贊收藏我文章的朋友,大家真的真的給了我很大的動力去繼續寫一些有關iOS開發的文章。大可放心我博客的更新程度,只要我有新的能夠寫的東西我不管如何都會抽時間寫的。html
ps:若是能夠的話下次點到 個人博客 去看吧,我以爲那個看上去比Segmentfault界面要好看一些。並且有一些以前的文章也能夠參考。react
最近項目很是繁忙...上星期原本想把和block內存管理有關的東西看一下再寫一個有關block的博客的後來有關block內存管理的博客都找好了沒時間實戰也就沒出。
寫了有兩週的項目,由於不少緣由因此這近兩週一直在寫界面,可是在寫界面的時候用到了ReactiveCocoa的東西,也是由於實踐了因此寫篇博客分享出來。ios
ReactiveCocoa(下文統稱爲RAC)
,具體我就不介紹了,能夠去個人博客裏那篇還沒填完坑的 mvvm開發模式 文章看一下。mvvm
我的覺得,RAC能夠以信號的方式來觸發各類動做,從而讓代碼更加精煉。ide
在UIButton上的使用
[[self.testBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { TestViewController *testVC = [[TestViewController alloc] init]; [self.navigationController pushViewController:testVC animated:YES]; }];
在這裏,對uibutton添加了一個rac_signalForControlEvents的方式,就不用利用addtarget的方式來再寫一個方法來進行對uibutton添加點擊事件了。函數
在UIAlertView的使用
UIAlertView *chooseAlert = [[UIAlertView alloc] initWithTitle:@"選擇圖片上傳" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"拍照上傳", @"從相冊選擇", nil]; [chooseAlert show]; [[chooseAlert rac_buttonClickedSignal] subscribeNext:^(NSNumber *indexNumber) { if ([indexNumber intValue] == 1) { [self chooseFromCamera]; } else if ([indexNumber intValue] == 2) { [self chooseFromAlbum]; } }];
這兩個是limeboy在博客裏提到的。由於有了RAC,因此我此次放棄使用blockskit和alertview的Categories。ui
下面兩個是我利用RAC的方式寫的代碼。code
在UITextfield的使用
第一個是我封裝了一個安卓風格的輸入框,就是下面一條線,當選擇這個框的時候,線會加粗變黑。
我把中間的兩句核心代碼貼出來。self是由於我繼承了一個textfield先進行功能添加和封裝。因此self就是代指一個textfield了。htm
[[self rac_signalForControlEvents:UIControlEventEditingDidBegin] subscribeNext:^(NSNumber *editing) { self.bottomBorder.backgroundColor = [UIColor blackColor].CGColor; }]; [[self rac_signalForControlEvents:UIControlEventEditingDidEnd] subscribeNext:^(NSNumber *editing) { self.bottomBorder.backgroundColor = [UIColor grayColor].CGColor; }];
其實這兩句是能夠用addtarget的方式來添加的,可是我選擇了用RAC的方式,更爲簡單也更爲容易理解。當textfield被選中的時候,下面的borderline會變成黑色,當結束選擇的時候,變成灰色。(其實當選擇的時候borderline應該還要加粗)。繼承
監控UIPagecontrol改變
還有一個地方我利用到了RAC。由於我如今須要實現一個功能,圖片輪播的時候,當圖片切換,我須要相應的刷新下面的一個列表。由於咱們的圖片輪播是用到的一個開源控件,我實在是能力有限不知道怎麼進一步修改這個控件來進一步封裝從而實現新的功能,我就利用了RAC。
[RACObserve(self.imagePlayer.pageControl, currentPage) subscribeNext:^(id x) { [self refreshSlideContent:self.imagePlayer.pageControl.currentPage]; }];
上面的代碼將pageControl和它的currentPage屬性相綁定,當currentPage改變的時候就會觸發下面的函數。而後我傳了一個currentPage的參數進去,從而下面的列表能夠進一步更新。可是開始加載的時候會調用3次…我不知道我哪一個地方寫坑了我還在尋找。各位見諒…
上面的幾個代碼片斷就是我這兩週在寫純界面的時候用到的一些和RAC有關的東西,由於自己就是寫純界面,因此沒用到不少,也很簡單,沒有其餘的功能。剛剛在查limeboy博客的時候看到NotificationCenter也能夠利用RAC的方式寫,我抽時間也會嘗試,由於項目裏沒用到,因此就不貼代碼了。
BTW:最近有一大波考試,博客更新程度會大大下降...後面可能會一直作項目,等積累一部分纔會繼續寫了。多謝各位的支持。
Limboy 說說ReactiveCocoa 2