1. 程式人生 > >iOS使用NSMutableSet記錄cell控制元件選中狀態避免cell重用問題

iOS使用NSMutableSet記錄cell控制元件選中狀態避免cell重用問題

我在tableView上面有個button,當我選中button的時候,上滑頁面發現選中的狀態沒有了,但是數組裡面新增的button tag值還在(類似於購物車那種方式)很是蛋疼,幸虧還有NSMutableSet來拯救我們啊 哈哈 廢話不多說,直接看程式碼
1、首先我們定義一個NSMutableSet的屬性
//用來記錄選中的狀態
@property (nonatomic, strong)NSMutableSet *selectdeSet;
2、初始化

self.selectdeSet = [NSMutableSet set];

3、在需要記錄狀態的地方記錄選中狀態,比如現在記錄每行cell的tag值
-(UITableViewCell )tableView:(UITableView

)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *identifier = @"cell";
XiaLaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
    cell = [[XiaLaTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
XiaLaModel *model = self.arrModel[indexPath.row];
cell.xialaModel = model;
cell.thirdLabel.tag = 100 + indexPath.row;
[cell.thirdLabel addTarget:self action:@selector(chooseAction:) forControlEvents:(UIControlEventTouchUpInside)];
//這個是NSMutableSet 判斷這個集合中是否存在傳入的物件,返回Bool值,如果是則此cell為選中狀態 否則為非選中狀態
if ([self.selectdeSet containsObject:[NSString stringWithFormat:@"%ld", 100 + indexPath.row]]) {
    cell.thirdLabel.selected = YES;
    [cell.thirdLabel setTitleColor:[UIColor whiteColor] forState:(UIControlStateSelected)];
}
return cell;

}

-(void)chooseAction:(UIButton *)sender
{

  if (sender.selected == NO) {
    sender.selected = YES;
    [sender setTitleColor:[UIColor whiteColor] forState:(UIControlStateSelected)];
    //向陣列中新增選中的物件
    [self.dataArray addObject:[NSString stringWithFormat:@"%ld", sender.tag]];
    //向NSMutableSet動態新增選中的物件
    [self.selectdeSet addObject:[NSString stringWithFormat:@"%ld", sender.tag]];
} else {
    sender.selected = NO;
    for (int i = 0; i < self.dataArray.count; i++) {
        if ([[self.dataArray objectAtIndex:i] isEqualToString:[NSString stringWithFormat:@"%ld",(long)sender.tag]]) {
            // 刪除陣列中選中的物件
            [self.dataArray removeObjectAtIndex:i];
            //刪除NSMutableSet中選擇的物件
            [self.selectdeSet removeObject:[NSString stringWithFormat:@"%ld", sender.tag]];
        }
    }
}

}
到此,使用NSMutableSet記錄選中狀態的方法結束,我們只需要注意的是,當你給陣列新增物件的時候,記得給NSMutableSet新增物件,同樣當你刪除掉數組裡面對象的時候記得刪除點NSMutableSet中的物件