最近脑子秀逗了
最近开始手写购物车,在自定义tableviewcell之后,在自定义的cell中添加一个可以选中的按钮,啥也没想就去register 然后设置代理,在vc中去修改按钮状态
btn.selected = !btn.selected
然后去看效果啊,恩 cell 的第一个被选中了, 然后往下一拉,screen外面的一个cell上的按钮状态 也是处于被选中状态,哭
下面是百度来的办法, 个人感觉第一个不咋地 btn就是要能复用才有意思么
网络方法一:
http://www.cocoachina.com/bbs/read.php?tid-212837-page-2.html
不要在cell里面创建btn,在调用UITableView之前,将btn创建好,然后在生成cell的时候,再将btn添加到cell的contentView上面,这样就不会出现复用的问题
网络方法二:
http://www.cocoachina.com/bbs/read.php?tid-1687855.html
解决办法:
cell 添加一个外部property
@property (nonatomic) BOOL isSelect;
需要在cell中重写layoutsubviews方法
在其中,根据你的isSelect设置你的button状态
三:
http://www.cocoachina.com/bbs/read.php?tid-1483416.html
四:
http://www.cocoachina.com/bbs/read.php?tid=1486063
后来自己回想了下 现在
记录一下 解决办法
1.自定义cell中有按钮,cell肯定是要被复用的
2.处理的核心是,在cell 的 btn的代理方法中, 修改其model中的isSelected (BOOL) 属性
3.reloadData 刷新
贴代码:
1.在自定的cell中使用model来修改按钮状态:
- (void)setModel:(JFShopCarModel *)model{
_model = model;
_chooseBtn.selected = model.isSelected;
}
2.在控制器中 实现代理方法 并刷新tableview
#pragma mark - CarBuyListDelete
-(void)chooseBtnClickDelegate:(UIButton *)btn model:(JFShopCarModel *)model{
//
if ([self.selectedShopArray containsObject:model]) {
[self.selectedShopArray removeObject:model];
model.isSelected = NO;
}
else{
[self.selectedShopArray addObject:model];
model.isSelected = YES;
}
[_tableShowView reloadData];
}