“自定义单元格的表视图”问题

时间:2011-08-30 14:20:12

标签: iphone uitableview custom-cell

我有一个自定义单元格的tableview,有5个部分。我使用自定义单元格“如果我点击一行,图像应该改变”。它工作正常。但是,在第一部分中选择一行后,它还会选择最后一部分中的任何一行。如果我向上和向下滚动,第一个和最后一个部分的行的单元格图像会随机移动。

帮助...... !!!

我是iphone开发的初学者。

以下是我的表格视图中的cellforrow代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *kCustomCellID = @"MyCellID";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (cell == nil)
{
    cell = (CustomCell *) [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCustomCellID]autorelease];
}
NSArray *localperson = [personArray objectAtIndex:indexPath.section];
cell.textLabel.text = [localperson objectAtIndex:indexPath.row]; 
return cell; }

以下是CustomCell的代码

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {   

if (self == [super initWithStyle:style reuseIdentifier:reuseIdentifier])
{
    self.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    // cell's check button
    checkButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
    checkButton.frame = CGRectZero;
    checkButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    checkButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
    [checkButton addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchDown];
    checkButton.backgroundColor = self.backgroundColor;
    [self.contentView addSubview:checkButton];
}
return self; }


- (void)layoutSubviews  { [super layoutSubviews];
CGRect contentRect = [self.contentView bounds];
CGRect frame = CGRectMake(contentRect.origin.x + 40.0, 8.0, contentRect.size.width, 30.0);
self.textLabel.frame = frame;
// layout the check button image
UIImage *checkedImage = [UIImage imageNamed:@"checked.png"];
frame = CGRectMake(contentRect.origin.x + 10.0, 12.0, checkedImage.size.width, checkedImage.size.height);
checkButton.frame = frame;
UIImage *image = (self.checked) ? checkedImage: [UIImage imageNamed:@"unchecked.png"];
UIImage *newImage = [image stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0];
[checkButton setBackgroundImage:newImage forState:UIControlStateNormal];   }

提前致谢。

2 个答案:

答案 0 :(得分:1)

在您的cellForRowAtIndexPath上,您需要将self.checked设置为适当的值。由于表格视图重新使用滚动屏幕的单元格,因此当您滚动时,您会看到这些重用的单元格重新出现在新位置。您正在正确设置内容,但您也需要设置选中的值。

答案 1 :(得分:1)

您的手机正在重复使用。

重用的属性具有checked属性,该属性可能仍具有该单元格之前使用的值。

确保在cellForRowAtIndexPath

中将选中的值设置为“no”