Кнопка удаления в ячейке uitableview работает неправильно - PullRequest
0 голосов
/ 11 июля 2011

Я показываю комментарии в 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];







}

1 Ответ

3 голосов
/ 11 июля 2011

Попробуйте переместить 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...