У меня есть приложение с некоторыми сообщениями, размещенными в UITableView. У каждого сообщения есть любимая кнопка, и мне нужно изменить ее изображение, когда пользователь нажимает на него. Вот код:Наличие конфликтов при обновлении образа UIButton в UITableViewCell в iOS
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"identifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
if(cell == nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"myNib" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
NSDictionary *post = [posts objectAtIndex:indexPath.row];
[cell.likeButton addTarget:self
action:@selector(clickedOnLike:)
forControlEvents:UIControlEventTouchUpInside];
cell.likeButton.tag = indexPath.row;
И обработчик щелчка:
-(IBAction)clickedOnLike:(id)sender
{
int tag = buttonSender.tag;
NSDictionary *post = [posts objectAtIndex:tag];
if(![self likedAlready:post]){
//set liked on this view...
//update view
NSLog(@"button: %@",buttonSender);
[sender setImage:[UIImage imageNamed:@"newImage.png"] forState:UIControlStateNormal];
//send like to server...
}
}
На данный момент, все будет в порядке. Проблема заключается в том, что после нажатия кнопки обновить представление и прокрутить список до других ячеек, другие просмотры кнопок, которые я никогда не нажал, также обновляются. Например, когда я нажимаю кнопку в indexPath 1, те, которые на 5 и 9 автоматически меняют изображения. Это mistery для меня, так как я вызываю отправителя действия напрямую и обновляю только его. Спасибо за помощь.
Поскольку ячейки повторно используются, вызовы «addTarget» остаются неподвижными, я думаю (вероятно, они укладываются в стек). Возможно, вам нужно удалить действия для контрольных событий в начале cellForRowAtIndexPath: – EDUsta