[iOS tableViewCell 复用] xib自定义cell 修改cell中按钮状态 出现按钮状态被复用

最近脑子秀逗了
最近开始手写购物车,在自定义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];
}

你可能感兴趣的:(#,iOS,语法技巧,#,iOS,系统控件,#,iOS,#,iOS,优化,#,iOS,自定义控件)