ReactiveCocoa Button在TableViewCell的应用

最近有稍微用过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在TableViewCell的应用)