假如現(xiàn)在tableViewCell上有一個(gè)button涧卵,當(dāng)我選中button的時(shí)候,上下滑動(dòng),發(fā)現(xiàn)button選中的狀態(tài)消失了袱蜡,但是數(shù)組里面添加的button.tag值還在……
如何避免這個(gè)問(wèn)題呢逻炊,我們使用NSMutableSet
來(lái)解決這個(gè)問(wèn)題......
1互亮、首先,我們定義一個(gè)NSMutableSet
的屬性
@property (nonatomic, strong)NSMutableSet *selectdeSet; //記錄選中狀態(tài)
@property (nonatomic, strong)NSMutableArray *dataArray;//數(shù)組中添加選中時(shí)候的tag值
2余素、viewdidload
里面初始化
self.selectdeSet = [NSMutableSet set];
self.dataArray = [NSMutableArray array];
3豹休、在需要記錄狀態(tài)的地方記錄選中狀態(tài),如記錄每個(gè)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)];
//這個(gè)是NSMutableSet 判斷這個(gè)集合中是否存在傳入的對(duì)象桨吊,返回Bool值威根,如果是則此cell為選中狀態(tài) 否則為非選中狀態(tài)
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)];
//向數(shù)組中添加選中的對(duì)象
[self.dataArray addObject:[NSString stringWithFormat:@"%ld", sender.tag]];
//向NSMutableSet動(dòng)態(tài)添加選中的對(duì)象
[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]]) {
// 刪除數(shù)組中選中的對(duì)象
[self.dataArray removeObjectAtIndex:i];
//刪除NSMutableSet中選擇的對(duì)象
[self.selectdeSet removeObject:[NSString stringWithFormat:@"%ld", sender.tag]];
}
}
}
}
使用NSMutableSet記錄選中狀態(tài)的方法結(jié)束,我們只需要注意的是视乐,當(dāng)你給數(shù)組添加對(duì)象的時(shí)候洛搀,記得給NSMutableSet添加對(duì)象,同樣當(dāng)你刪除掉數(shù)組里面對(duì)象的時(shí)候記得刪除點(diǎn)NSMutableSet中的對(duì)象