Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Кнопка "Удалить" в ячейке uitableview не работает должным образом

Автор вопроса: iProgrammerОтветов: 1

Я показываю комментарии в UItableView и создал кнопку удаления в ячейке. Когда я удаляю любой комментарий, он удаляется. и я использовал [Tableview reloadData], но он всегда удаляет последнюю ячейку из таблицы, и когда я проверяю удаленный комментарий в следующий раз, все в порядке. Почему представление таблицы всегда удаляет последнюю ячейку. Мой код

- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

   NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%i",indexPath.row];

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if (cell == nil) {
                    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];


       //delete button in uitableview cell ================================

         deleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];

         deleteBtn.frame = CGRectMake(270, 10, 20, 20);

          //[deleteBtn setTitle:@"delete" forState:UIControlStateNormal];

          [deleteBtn setImage:[UIImage imageNamed:@"deletefb.png"] forState:UIControlStateNormal];
          deleteBtn.tag = indexPath.row;

          [deleteBtn addTarget:self action:@selector(delete:) forControlEvents:UIControlEventTouchUpInside];
                    deleteBtn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;

           [cell.contentView addSubview:deleteBtn];

            }

            return cell;

    }

Метод удаления

- (void )delete:(id)sender {


    UIButton *myDeleteButton = (UIButton *)sender ;


    //delete method of comment

    NSMutableDictionary *variables = [NSMutableDictionary dictionaryWithCapacity:1];

    [variables setObject:@"delete" forKey:@"method"];


    [fbGraph doGraphPost:[NSString stringWithFormat:@"%@",[(Facebook *)[tableArray objectAtIndex:myDeleteButton.tag]postId]] withPostVars:variables];


     //load tableview
    [self responseMethod];  //method to load comments
    //show alert
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Deleted"
                                                   message:@"" delegate:nil
                                         cancelButtonTitle:@"Ok" otherButtonTitles:nil ];

    [alert show];
    [alert release];


}

iphoneuitableviewuibutton

Ответы

Ответ 1 · рейтинг 3 · Community

Попробуйте переместить deleteBtn.tag = indexPath.row; за пределы условия if (cell == nil).

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

if (cell == nil) {
    // Do you other stuff here
}
deleteBtn.tag = indexPath.row;
return cell;

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

NSString *identifier = @"someUniqueValue";

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы