码迷,mamicode.com
首页 > 其他好文 > 详细

进阶篇第六期:我称它为“交互式开发思想”

时间:2015-04-19 19:38:19      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:ios


最近一直在做项目,在项目中呢也遇到了某些问题,比如为一个状态点赞或者是踩,那么按钮的状态会随之改变,但是这个过程是要发送请求的,也就是说我们要在请求回来以后才改变状态,于是小弟就有了一个大胆的想法,那么我的这个想法呢,就是以交互为主,开发逻辑为辅,让交互设计融入开发代码之中,所以我称它为:交互式开发思想,希望可以帮助小伙伴哦


主要就是下面这两个图的效果,也就是点击的时候让它有反应,当请求过后还要再次回调进来,比如请求成功,我们就不用改变它的状态,但是请求失败,我们就要将原来的状态改变,而我们正常的做法其实是点击的时候有一个动画出来,然后请求成功后,状态改变,失败,则状态不变,对应Label上的数字的值也不做改变,但为了方便一点,就没有做动画


技术分享

技术分享


废话不多说,先看代码


这里的难点在于如何巧妙的运用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

进阶篇第六期:我称它为“交互式开发思想”

标签:ios

原文地址:http://neusoftios.blog.51cto.com/9977509/1635771

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!