Выбранные кнопки UITableViewCell меняются на невыбранное состояние после прокрутки UITableView

Действие кнопки – SongsSelectionSongs_Click . Когда я нажимаю на эту кнопку, меняется изображение кнопки, подсчет нажатий кнопки становится правильным, и после того, как выбранные изображения кнопок также меняются, но когда я прокручиваю назад и вперед в UITableView , изображение кнопки кажется случайным образом меняющимся.

введите описание изображения здесь

Это мой код:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"SongsTAbleViewCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if(cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SongsTAbleViewCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } btn_songSelect.tag = indexPath.row; lbl_songLabel.text = [[arr_tablVArray objectAtIndex:indexPath.row] objectForKey:@"SongTitle"]; lbl_artistLabel.text = [[arr_tablVArray objectAtIndex:indexPath.row] objectForKey:@"SongArtist"]; return cell; } -(IBAction)SongsSelectionSongs_Click:(id)sender { UIButton *button = sender; CGPoint correctedPoint = [button convertPoint:button.bounds.origin toView:self.tblv_SongslisttableView]; NSIndexPath *indexPath = [self.tblv_SongslisttableView indexPathForRowAtPoint:correctedPoint]; NSLog(@"Button tapped in row %d",indexPath.row); SelectedAlbumUrl = [[arr_tablVArray objectAtIndex:indexPath.row] objectForKey:@"SongUrl"]; str_songtitle = [[arr_tablVArray objectAtIndex:indexPath.row] objectForKey:@"SongTitle"]; if ([[button backgroundImageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"add.png"]]) { btn_songsShareButton.userInteractionEnabled = YES; [btn_songSelect setBackgroundImage:[UIImage imageNamed:@"remove.png"] forState:UIControlStateNormal]; buttonStatus = buttonStatus +1; [btn_songsShareButton setImage:[UIImage imageNamed:@"share selected.png"] forState:UIControlStateNormal]; } else { [btn_songSelect setBackgroundImage:[UIImage imageNamed:@"add.png"] forState:UIControlStateNormal]; buttonStatus = 1; [btn_songsShareButton setImage:[UIImage imageNamed:@"share unselected.png"] forState:UIControlStateNormal]; } } 

3 Solutions collect form web for “Выбранные кнопки UITableViewCell меняются на невыбранное состояние после прокрутки UITableView”

// Попробуйте, он работает нормально

pragma .h Файл

 NSMutableArray * rowIdArray; 

Файл прагмы .M

 @synthesize rowIdArray; - (void)viewDidLoad { rowIdArray=[[NSMutableArray alloc]init]; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [NamesArray count]; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; ViewControllerCell *cell = (ViewControllerCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nil) { NSArray *nib; nib = [[NSBundle mainBundle] loadNibNamed:@"ViewControllerCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } // Configure the cell... cell.nameslbl.text = [NamesArray objectAtIndex:indexPath.row]; cell.nameBtn.tag=indexPath.row; [cell.nameBtn addTarget:self action:@selector(NamesClick_Tapped:) forControlEvents:UIControlEventTouchUpInside]; NSString *a=[NSString stringWithFormat:@"%d", indexPath.row]; NSString *b=[[NSString alloc]init]; for (int i=0;i<[rowIdArray count];i++) { b=[rowIdArray objectAtIndex:i]; if ([a isEqualToString:b]) { UIImage *buttonImage = [UIImage imageNamed:@"star_selected.png"]; [cell.nameBtn setBackgroundImage:buttonImage forState:UIControlStateNormal]; } } return cell; } -(IBAction)NamesClick_Tapped:(id)sender { CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.NameTableView]; NSIndexPath *indexPath = [self.NameTableView indexPathForRowAtPoint:buttonPosition]; NSString *rowIdStr = [NSString stringWithFormat:@"%d", indexPath.row]; if(![rowIdArray containsObject:rowIdStr]) { [rowIdArray addObject:rowIdStr]; }else{ [rowIdArray removeObject: rowIdStr]; } [self.NameTableView reloadData]; } 

Вы не делаете ничего в своем cellForRowAtIndexPath чтобы выбрать или отменить выбор изображения. Когда вы повторно используете ячейку, она не изменяет состояние ячейки, если вы явно не cellForRow ее в cellForRow . Поэтому он будет либо повторно использовать выбранную или отмененную ячейку (независимо от первой доступной ячейки многократного использования), и поместить ее на экран как есть.

Чтобы исправить эту проблему, в вашем методе cellForRowAtIndexPath вам понадобится логика, чтобы выбрать или отменить выбор изображения на основе того, что подходит.


В общем, если ваша проблема имеет какое-либо отношение к тому, что «мои ячейки не отображаются правильно при прокрутке», вы не правильно используете свои ячейки.

EDIT: в ответ на ваш комментарий нет , я не буду переписывать ваш код. Но я дам вам какое-то направление.

Я бы рекомендовал сохранить дополнительный ключ / значение в вашем arr_tablVArray который будет отслеживать, включать или отключать «share» (я бы предложил значение bool ). Это сделало бы это так, чтобы вы могли проверить, включено или отключено «share», проверяя bool вместо проверки содержимого изображения кнопки в методе IBAction .

Эта информация теперь будет доступна и в вашем методе cellForRowAtIndexPath , и вы можете проверить значение для текущей записи в arr_tablVArray и соответственно настроить свои изображения так же, как вы установили lbl_songLabel и lbl_artistLabel .

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

  • Проверка уведомлений о ожиданиях
  • Как получить полный запрос от NSURLRequest?
  • Динамическая высота TableViewCell для загрузки загруженного изображения
  • как перезагрузить конкретный раздел таблицы
  • Запрос GET с использованием AFNetworking и сохранение ответа
  • Проблема со значением UITableView -64pt
  • Ожидание вложенных вызовов AFNetworking и завершение циклов
  • Скрыть или отключить кнопку «Назад» в конечном окне приложения на основе навигационного контроллера
  • Когда требуется NS_RETURNS_RETAINED?
  • iOS Цель C: Как увеличить количество строк после заданного условия
  • Подклассификация NSOperation для интернет-операций с повторением
  • Interesting Posts

    UIView subviews 'порядок?

    Доступны ли приложения HTML5 в iOS 4.3.4?

    UIToolbar отказывается двигаться

    Как определить размеры изображений 1x, 2x и 3x в зависимости от размера соответствующего UIImageView?

    iOS – использование TTTAttributedLabel для установки двух цветовых текстов

    Создание делегатов на месте с блоками

    Как реализовать Google Диск и Google Plus sdk в проекте ios

    Быстрое обновление пользовательского интерфейса из фонового потока. Лучшие практики

    Рисование линии с помощью кисти в iOS

    Определить, что приложение запущено в фоновое состояние?

    iOS Today Widget – может ли приложение определить, включено ли оно / отключено?

    Тайная катастрофа iOS 7

    ERROR ITMS-90032: «Недопустимый путь к изображению – изображение не найдено на пути, указанном под ключом« CFBundleIcons »: AppIcon40x40"

    hitTest, чтобы отклонить клавиатуру, вызывающую странное поведение

    Получите GPS без предупреждения с разрешением ROOT (джейлбрейк)

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.