在項目中我們經常會遇到tableviewcell多選的情況,但是因為cell復用,導致一個cell滑出界面後再返回的時候,cell的選中狀態會消失,具體的解決辦法 我們可以使用nsmutableset ,nsmutableset 和nsarray類似,有addObject: removeObject: 兩種添加和移除數據的方法,這樣在選中cell的時候我們可以將cell的indexPath或者cell上控件的tag值加入nsmutableset中,在cell復用的時候通過containsObject:這個方法來判斷是否給cell賦上選中狀態.下面是大致的實現方法.
#pragma mark – 返回每一行顯示的內容(每一行顯示怎樣的cell)
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ShoppingCartTableViewCell *cell = (ShoppingCartTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@”ShoppingCartTableViewCell”];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@”ShoppingCartTableViewCell” owner:self options:nil] lastObject];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
// cell.numberTextField.text = @”111″;
}
GoodCartInfoModel *model = dataArray[indexPath.row];
[cell addTheValue:model];
cell.delegate = self;
cell.selectButton.tag = 100 + indexPath.row;
cell.selectButton.selected = NO;
[cell.selectButton addTarget:self action:@selector(selectButtonClick:) forControlEvents:(UIControlEventTouchUpInside)];
if ([btnStatusSet containsObject:[NSString stringWithFormat:@”%d”,(100 + indexPath.row)]]) {
cell.selectButton.selected = YES;
[cell.selectButton setImage:[UIImage imageNamed:@”btn_select_default”] forState:(UIControlStateNormal)];
}
return cell;
}
-(void)selectButtonClick:(UIButton *)btn
{
if (btn.selected == NO) {
btn.selected = YES;
[btnStatusSet addObject:[NSString stringWithFormat:@”%d”,btn.tag]];
}else
{
btn.selected = NO;
[btnStatusSet removeObject:[NSString stringWithFormat:@”%d”,btn.tag]];
}
}