проблема с табличным представлением с customcell

У меня есть табличное представление с пользовательскими ячейками и с 5 разделами. Я использовал пользовательскую ячейку для «если я нажму на строку, изображение должно измениться». он работает нормально. но после выбора строки в первом разделе он также выбирает любую строку в последнем разделе. и если я прокручиваю вверх и вниз, изображения ячеек строки первого и последнего раздела смещаются случайным образом.

помогите плиз...!!!

Я новичок в разработке iphone.

Ниже приведен код ячейки в моем табличном представлении.

- (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];   }

Заранее спасибо.


person Purnachandar Rao Voleti    schedule 30.08.2011    source источник


Ответы (2)


В вашем cellForRowAtIndexPath вам нужно установить self.checked в соответствующее значение. Поскольку табличное представление повторно использует ячейки, которые исчезают с экрана, вы видите, что эти повторно используемые ячейки снова появляются в новых позициях при прокрутке. Вы правильно устанавливаете содержимое, но вам также необходимо установить проверенное значение.

person Dancreek    schedule 30.08.2011

Ваша ячейка используется повторно.

Повторно используемый элемент имеет свойство checked, которое может по-прежнему иметь значение из предыдущего использования ячейки.

Убедитесь, что вы установили проверенное значение «нет» в cellForRowAtIndexPath

person Hermann Klecker    schedule 30.08.2011