最近有稍微用过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的事件代码就会重复调用。
网友评论