У меня проблема с приложением для iPhone, которая беспокоила меня в течение нескольких дней, и не похоже, чтобы это было так сложно, поэтому я уверен, что упускаю что-то очевидное.Я исследовал множество дискуссий на форумах по «схожим» темам, но ничего, что действительно решает эту проблему, в частности.
Чтобы было ясно, если есть какая-то часть документации или другой источник, который я должен исследовать, пожалуйста, укажитеменя в правильном направлении.
Здесь идет ...
У меня есть список элементов, которые я показываю пользователю в таблице (uitableview).Ячейка (uitableviewcell) для каждого элемента является пользовательской и содержит изображение и кнопку «Мне нравится» (uibutton).Как и ожидалось, для каждого элемента в таблице пользователь может нажать кнопку «Нравится» или проигнорировать ее.Кнопка «Мне нравится» вызывает отдельный процесс обновления сервера.Просто, верно?
Итак, вот в чем проблема:
При нажатии кнопки «Мне нравится» в конкретной ячейке состояние «Выбрано» работает нормально, но в тот момент, когда вы прокручиваете ячейку вне поля зрения,другие случайные ячейки в таблице показывают кнопку «Нравится» как выбранную, даже если они никогда не были затронуты.Поскольку ячейки используются повторно по понятным причинам производительности, я понимаю, почему это может произойти.Я не понимаю, почему мой подход (см. Код ниже) не отменяет и не сбрасывает состояние кнопки так, как я думаю.Для краткости, я включаю только соответствующий код (надеюсь, правильно отформатированный):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MyCustomCell";
MyCustomViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[MyCustomViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
NSString *myRating = [[self.dataArray objectAtIndex:indexPath.row] valueForKey:@"my_rating"];
// Create the Like button
UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(260, 68, 40, 40)];
[likeButton setImage:[UIImage imageNamed:@"thumbsUp"] forState:UIControlStateNormal];
[likeButton setImage:[UIImage imageNamed:@"thumbsUpSelected"] forState:UIControlStateSelected];
if (myRating == @"9") {
[likeButton setSelected:YES];
}
[likeButton setTitle:@"9" forState:UIControlStateNormal];
[likeButton setTag:indexPath.row];
[cell.contentView addSubview:likeButton];
[likeButton addTarget:self action:@selector(likeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
- (void)likeButtonPressed:(UIButton *)sender {
// Changed the Selected state on the button
UIButton *button = (UIButton *)sender;
button.selected = !button.selected;
// Create a new object with the user's rating and then replace it in the dataArray
NSString *ratingText = sender.titleLabel.text;
NSMutableArray *myMutableArray = [[self.dataArray objectAtIndex:row] mutableCopy];
[myMutableArray setValue:ratingText forKey:@"my_rating"];
[self.dataArray replaceObjectAtIndex:row withObject:myMutableArray];
}
Итак, я прошел через многократные итерации, но не могу понять состояние кнопкипоказать выбранное изображение для тех элементов, которые понравились, и сохранить нормальное изображение для тех элементов, которые не понравились.
Любая помощь или совет будет принята с благодарностью.