Кнопка CellView TableView изменяет содержимое другой ячейки

При нажатии кнопки на определенной ячейке таблицы, кнопка нажимает и меняет флажок. Однако другие ячейки также меняются на галочку. И перезагрузка табличного представления не приводит к исчезновению галочек. Я понимаю, что это связано с многократными ячейками. Но как я могу обновить cellForRowAtIndex от метода, вызываемого при нажатии кнопки ячейки?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // Configure the cell... static NSString *ReusableIdentifier = @"Cell"; SetListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReusableIdentifier forIndexPath:indexPath]; cell.delegate = self; if ([self.selectedRows containsIndex:indexPath.row]) { [cell.plusButton setBackgroundImage:checkImage forState:UIControlStateNormal]; } else { [cell.plusButton setBackgroundImage:plusImage forState:UIControlStateNormal]; } return cell; } 

Метод в классе пользовательских ячеек.

 - (IBAction)addSongButtonPressed:(UIButton *)sender { [self.delegate addSongButtonPressedOnCell:self]; UIImage *checkImage = [UIImage imageNamed:@"check.png"]; [self.plusButton setBackgroundImage:checkImage forState:UIControlStateNormal]; } 

Метод из делегата ячейки.

 -(void)addSongButtonPressedOnCell:(id)sender { NSIndexPath *indexPath = [self.searchTableView indexPathForCell:sender]; NSMutableDictionary *track = [self.searchTracks objectAtIndex:indexPath.row]; [self.selectedRows addIndex:indexPath.row]; } 

Вам нужно отслеживать состояние выбора вне ячейки – ячейка является временным объектом, который отображает информацию из вашей модели данных, вы не можете использовать ее для хранения состояния.

Поскольку у вас есть неизменяемые словари для ваших данных трека, вам нужно будет добавить дополнительную структуру данных для хранения вашего состояния выбора. Я бы использовал NSMutableSet .

Добавить свойство в контроллер вида

 @property (strong,nonatomic) NSMutableSet *selectedRows; 

и инициализировать его в viewDidLoad

 self.selectedRows=[NSMutableSet new]; 

Затем вы можете использовать для отслеживания / проверки состояния выбора –

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // Configure the cell... static NSString *ReusableIdentifier = @"Cell"; SetListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReusableIdentifier forIndexPath:indexPath]; NSDictionary *track = [self.searchTracks objectAtIndex:indexPath.row]; cell.searchSongTitle.text = [track objectForKey:@"title"]; cell.searchArtist.text = [[track objectForKey:@"user"]objectForKey:@"username"]; cell.plusButton.tag=indexPath.row; if ([self.selectedRows containsIndex:indexPath.row]) { [cell.plusButton setBackgroundImage:checkImage forState:UIControlStateNormal]; } else { [cell.plusButton setBackgroundImage:nil forState:UIControlStateNormal]; } //If there is no picture available. Adds a Custom picture. if ([[track objectForKey:@"artwork_url"] isEqual:[NSNull null]]){ cell.searchAlbumArtImage.image = [UIImage imageNamed:@"SoundCloudLogo"]; } else{ //Init the cell image with the track's artwork. UIImage *cellImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[track objectForKey:@"artwork_url"]]]]; cell.searchAlbumArtImage.image = cellImage; } return cell; } 

И тогда ваш обработчик нажатия кнопки станет –

 - (IBAction)cellAddSongButtonPressed:(UIButton *)sender { NSInteger index = sender.tag; [self.selectedRows addIndex:index]; [sender setBackgroundImage:checkImage forState:UIControlStateNormal]; } 

Было бы NSDictionary создать класс Track а не использовать NSDictionary

  • iOS: можно отправить или отправить сообщение в Google Plus
  • Xcode 7.3 Не удается установить приложение на iPhone
  • нажатие ViewController из представления контейнера изменяет его раму представления на исходный размер
  • Будет ли тот же IOS SDK иметь разные типы поведения, используя разные версии Xcode
  • Где я должен начать разработку для Mac?
  • Предотвращение резервной копии iCloud папки
  • Правильный способ кэширования данных на iPhone / iPad
  • Ошибка AudioKit на устройстве, но не симулятор
  • Приложение iOS / iPhone, кажется, добавляет цветовую маску / оттенок цвета к моему тексту
  • Xcode 9 - Как запомнить последний симулятор
  • Соотношение между эффективными ценами за тысячу показов и показами
  • Давайте будем гением компьютера.