進階篇第六期:我稱它為“交互式開發思想” -开发者知识库

進階篇第六期:我稱它為“交互式開發思想” -开发者知识库,第1张


最近一直在做項目,在項目中呢也遇到了某些問題,比如為一個狀態點贊或者是踩,那么按鈕的狀態會隨之改變,但是這個過程是要發送請求的,也就是說我們要在請求回來以后才改變狀態,於是小弟就有了一個大膽的想法,那么我的這個想法呢,就是以交互為主,開發邏輯為輔,讓交互設計融入開發代碼之中,所以我稱它為:交互式開發思想,希望可以幫助小伙伴哦


主要就是下面這兩個圖的效果,也就是點擊的時候讓它有反應,當請求過后還要再次回調進來,比如請求成功,我們就不用改變它的狀態,但是請求失敗,我們就要將原來的狀態改變,而我們正常的做法其實是點擊的時候有一個動畫出來,然后請求成功后,狀態改變,失敗,則狀態不變,對應Label上的數字的值也不做改變,但為了方便一點,就沒有做動畫


wKiom1UzceGCxQ69AABQzjhv4yM296.jpg

wKioL1UzczrDraXWAABchycnTtA564.jpg


廢話不多說,先看代碼


這里的難點在於如何巧妙的運用Delegate以及Block來做這些事情,那么我們就先定義一個Block吧


 typedef void(^ButtonBlock)(BOOL isChanged);


然后寫一個Delegate,然后在方法里面添加Block當參數


 - (void)tableViewCell:(SWHTableViewCell *)cell didTappedButton:(UIButton *)button block:(ButtonBlock)block;


有些時候寫代碼為什么要分好模塊,就是因為我們要遵循MVC的架構模式,這樣將代碼的耦合度降到最低,也方便我們后期對其很好的維護,對於代碼質量相關的帖子,我會每個月更新一次的哦


接下來我們來看看在Up按鈕事件里面要做的事情

 - (void)upActionButton:(UIButton *)button {    if ([self isButtonTypeChanged]) {        return;    }        [button setBackgroundColor:[UIColor redColor]];    [self.model setButtonUpType:SWHButtonTypeUp];    [self.numLabel setText:[NSString stringWithFormat:@"%ld",   self.model.num]];        __weak SWHTableViewCell *weakSelf = self;    if ([self.delegate respondsToSelector:@selector(tableViewCell:didTappedButton:block:)]) {        [self.delegate tableViewCell:self didTappedButton:button block:^(BOOL isChanged) {                    }];    }}


接下來我們用一個假數據來模仿一次網絡請求,我這里用的是delay方法


 - (BOOL)delayRequest {    NSInteger num = random() % 2;        if (num) {        NSLog(@"請求網絡成功");                return YES;    }        NSLog(@"請求網絡失敗");        return NO;}


接下來我們再利用delay方法里面的返回值來改寫這個block參數


 - (void)tableViewCell:(SWHTableViewCell *)cell didTappedButton:(UIButton *)button block:(ButtonBlock)block {    __weak ViewController *weakSelf = self;    __block ButtonBlock newBlock = block;    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{        newBlock([weakSelf delayRequest]);    });}


然后我們再根據參數來回調block到UpAction里面,所有的Cell相關的UI都要放在Cell里面來做


     __weak SWHTableViewCell *weakSelf = self;    if ([self.delegate respondsToSelector:@selector(tableViewCell:didTappedButton:block:)]) {        [self.delegate tableViewCell:self didTappedButton:button block:^(BOOL isChanged) {            if (!isChanged) {                [button setBackgroundColor:[UIColor yellowColor]];                [weakSelf.numLabel setText:[NSString stringWithFormat:@"%ld", --weakSelf.model.num]];                [weakSelf.model setButtonUpType:SWHButtonTypeNone];            }        }];    }


沒錯,你會發現,這樣會把耦合度降到最低


在下一期的代碼質量提高的帖子里面,我會將這期的大部分代碼寫進去,讓我們任性的提高我們的代碼質量,而不是惰性的提高它們哦




如有任何技術相關的問題,請來群里提問並分享,讓我們一起任性的進步





本文出自 “東軟iOS校友群的技術博客” 博客,請務必保留此出處http://neusoftios.blog.51cto.com/9977509/1635771

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复