Выбор UITableViewCell остается во всех ячейках! - PullRequest
0 голосов
/ 31 августа 2009

Я все еще нахожусь в процессе ознакомления с iPhone SDK.

Вот что я пытаюсь сделать:

У меня есть UIScrollView, и у каждого вида прокрутки есть UITableView, и я реализовал пользовательский UITableViewCell.

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

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

Я знаю, что делаю глупости, но не могу понять, что. Любая помощь будет очень признательна.

Спасибо, Amy

Вот соответствующие источники данных и методы делегатов.



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 NSLog(@"%s", __FUNCTION__);
 static NSString * ChoiceTableCellIdentifier = @"ChoiceTableCellIdentifier";
 choiceTableCell = (ChoiceTableCell *)[tableView dequeueReusableCellWithIdentifier:ChoiceTableCellIdentifier]; 
 if( choiceTableCell == nil )
 {
  choiceTableCell = [[[ChoiceTableCell alloc] 
       initWithFrame:CGRectZero
       reuseIdentifier:ChoiceTableCellIdentifier] autorelease];
 }
 return choiceTableCell;
}


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 NSLog(@"%s", __FUNCTION__);
 int newRow = [indexPath row];
 int oldRow = [lastIndexPath row];
 if ( (newRow != oldRow) || (newRow == 0) )
 {
        UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
  UIImageView *indicatorN = (UIImageView *)[newCell.contentView viewWithTag:SELECTION_INDICATOR_TAG_1];
  indicatorN.image = [UIImage imageNamed:@"selected.png"];
  newCell.backgroundView.backgroundColor = [UIColor clearColor];

        UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath];
  UIImageView *indicatorO = (UIImageView *)[oldCell.contentView viewWithTag:SELECTION_INDICATOR_TAG_1];
  indicatorO.image = [UIImage imageNamed:@"notSelected.png"];
  oldCell.backgroundView.backgroundColor = [UIColor clearColor];
        lastIndexPath = indexPath;
 }
}



1 Ответ

2 голосов
/ 30 сентября 2009

Вы повторно используете ячейку с изображением «selected.png». В методе cellForRowAtIndexPath вы должны «выбрать» или «отменить выбор» вашей ячейки в зависимости от вашего последнего выбора. То есть: если indexPath равен lastIndexPath, вы должны поместить фон «selected.png», иначе «noSelected.png». Когда вы повторно используете ячейку, она сохраняет свое прежнее состояние, поэтому вам нужно инициализировать все это.

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