проблема с "представлением таблицы с пользовательской ячейкой" - PullRequest
1 голос
/ 30 августа 2011

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

plz help ... !!!

Я новичок в iphonedevelopment.

Ниже приведен код 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 ]

1 голос
/ 30 августа 2011

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

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

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

1 голос
/ 30 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...