iOS使用NSMutableSet記錄cell控制元件選中狀態避免cell重用問題
阿新 • • 發佈:2019-02-05
我在tableView上面有個button,當我選中button的時候,上滑頁面發現選中的狀態沒有了,但是數組裡面新增的button tag值還在(類似於購物車那種方式)很是蛋疼,幸虧還有NSMutableSet來拯救我們啊 哈哈 廢話不多說,直接看程式碼
1、首先我們定義一個NSMutableSet的屬性
//用來記錄選中的狀態
@property (nonatomic, strong)NSMutableSet *selectdeSet;
2、初始化
self.selectdeSet = [NSMutableSet set];
3、在需要記錄狀態的地方記錄選中狀態,比如現在記錄每行cell的tag值
-(UITableViewCell )tableView:(UITableView
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中的物件