美文网首页
ReactiveCocoa Button在TableViewCe

ReactiveCocoa Button在TableViewCe

作者: Aliyunyun | 来源:发表于2016-05-10 14:30 被阅读1296次

    最近有稍微用过ReactiveCocoa,主要是用的Button,Button的target-action的模式,处理事件很不方便,特别是需要传递参数。发现ReactiveCocoa的block的方式比较好用。先看看简单的用法:

    基本用法:

      [[chatBtn rac_signalForControlEvents:UIControlEventTouchUpInside]
         subscribeNext:^(id x) {
            NSLog(@"x %@", x);
            ProductionCellEntity *cellEntity = productList[indexPath.row];
            [weakSelf goToChatView:cellEntity.entity.linkman];
        }];
    

    在UITableViewCell中使用Button,经常我们需要判断是那一个Cell的Btn点击的。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        
        ProductTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseName];
        if (cell == nil) {
            cell = [[ProductTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseName];
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
        }
        
        WS(weakSelf)
        cell.entity = productList[indexPath.row];
        [[[cell.chatBtn rac_signalForControlEvents:UIControlEventTouchUpInside]
          takeUntil:cell.rac_prepareForReuseSignal]
         subscribeNext:^(id x) {
            ProductionCellEntity *cellEntity = productList[indexPath.row];
            [weakSelf goToChatView:cellEntity.entity.linkman];
        }];
    
        return cell;
    }
    

    记住这个:

      takeUntil:cell.rac_prepareForReuseSignal
    

    在cellForRowAtIndexPath 里面,会被重复调用,如果不加上面那句话,一个button就会有多个监听者,button的事件代码就会重复调用。

    相关文章

      网友评论

          本文标题:ReactiveCocoa Button在TableViewCe

          本文链接:https://www.haomeiwen.com/subject/nolyrttx.html