在Custom Cell中双重选择uitableviewcell

时间:2011-08-11 05:46:25

标签: objective-c ios uitableview

我有一个关于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行。

提前致谢

3 个答案:

答案 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所说的是正确的(并且他推荐的方法将是正确的)长期提供更好的解决方案。)