我有一个关于UitableViewCell的问题。问题是我已经制作了一个自定义单元格,我在该单元格中有一个复选框图像按钮。我检查并取消选中它。它工作正常,但问题是,当我选择第1行时,它也选择第10行,与其他行相同,如2,它将自动选择第11行。我一次显示10行。
这是我的CellForIndexPath代码
static NSString *cellIdentifier = @"Cell";
InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell==nil) {
NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil];
cell = [arrayNibs objectAtIndex:0];
cell.delegate = self;
cell.total = [dataArray count];
}
cell.tag = indexPath.row;
cell.lblTitle.text = [dataArray objectAtIndex:indexPath.row];
if (indexPath.row==0) {
cell.imgBg.image = [UIImage imageNamed:@"tableCell_top_default.png"];
}else if(indexPath.row == [dataArray count]-1){
cell.imgBg.image = [UIImage imageNamed:@"tableCell_bottom_default.png"];
}else{
cell.imgBg.image = [UIImage imageNamed:@"tableCell_middle_default.png"];
}
return cell;
另外,我正在检测触摸,以便我可以更改背景图像(我有另一个图像作为背景)。 Touch Began代码(在自定义单元格中如下)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
//NSLog(@"%i",tag);
isSelected = !isSelected;
btnTickMark.selected = !btnTickMark.selected;
(isSelected ? (onImage = YES) : (onImage = NO));
有人可以在这个问题上帮助我,为什么当我点击一行时选择了2行。
提前致谢
答案 0 :(得分:2)
这是因为UITableView使单元格出列。当你在每个屏幕上显示10行时它完全适合,当第11行从第1行出列时,它会显示为已检查。
为了避免这种行为,你必须在tableView:cellForRowAtIndexPath:
添加一个检查,为每个单元格设置检查参数 - 就像你为每个单元格设置的文本一样。
答案 1 :(得分:0)
试试这个:
NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil];
for (id currentObject in arrayNibs){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (InterestsTableViewCell *) currentObject;
cell.Delegate = self;
cell.total = [dataArray count];
break;
}
}
让我知道这是否适合你。
答案 2 :(得分:0)
快速修复 - 从
更改此行InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
到
InterestsTableViewCell *cell = nil;
从内存/效率的角度来看,它并不好,因为你不会重复使用单元格,而是每次都会从笔尖重新加载一个单元格 - 但它会证明Florian Mielke所说的是正确的(并且他推荐的方法将是正确的)长期提供更好的解决方案。)