2013-10-24 1 views
2

Я использую пользовательскую ячейку для UITableView, и на ней есть UIButton, который должен удалить текущую ячейку из представления таблицы. В cellForRowAtIndexPath я делаюНе удалось удалить пользовательскую ячейку из UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"CellIdentifier"; 
    NSLog(@"Creating Cell"); 

    FADynamicCell *cell= (FADynamicCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) 
    { 
     cell = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([FADynamicCell class]) 
              owner:nil 
              options:nil] lastObject]; 
    } 

    currentIndexPath = indexPath; 

    UIButton *removeButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    removeButton.tag = indexPath.row +100; 
    removeButton.frame = cell.removeButton.frame; 
    removeButton.backgroundColor = [UIColor colorWithRed:255./255 green:65./255 blue: 21./255 alpha:1]; 
    removeButton.titleLabel.font = [UIFont systemFontOfSize:12]; 
    removeButton.titleLabel.textAlignment = NSTextAlignmentCenter; 
    [removeButton setTitle:@"Remove" forState:UIControlStateNormal]; 
    [removeButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [removeButton addTarget:self action:@selector(removing) forControlEvents:UIControlEventTouchUpInside]; 
    [cell addSubview:removeButton]; 

    return cell; 
} 

И в функции для удаления

-(void) removing 
{ 
    [TOperations deleteTickerFromGroup:tickerGroupID andTickerSymbol:selectedSymbol]; 

    NSNumber *selectedRowIndex1 = [NSNumber numberWithInteger:currentIndexPath.row]; 
    [tableView1 beginUpdates]; 
    NSIndexPath *previousPath = [NSIndexPath indexPathForRow:selectedRowIndex1.integerValue-1 inSection:0]; 
    [tableView1 endUpdates]; 
    [tableView1 reloadData]; 

} 

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

Любая помощь будет оценена ...

+0

Проблема может быть в источнике данных. Проверьте, сохраняется ли элемент, когда вы приходите с другого экрана. –

+0

@ Святослав Якимов: Когда я прихожу с другого экрана, тогда он не существует, если я нажал кнопку удаления ранее – Atul

+0

@Atul из вашего вышеуказанного кода, кажется, что источник данных вашего табличного представления отсутствует. Вы должны использовать некоторый массив/словарь для отслеживания создаваемых ячеек и удаления и т. Д. –

ответ

2

Чтобы удалить строку/ячейку из представления таблицы, необходимо вызвать метод deleteRowsAtIndexPaths:withRowAnimation: на вашем UITableView экземпляра.

NSIndexPath *previousPath = [NSIndexPath indexPathForRow:selectedRowIndex1.integerValue-1 inSection:0]; 
[self.yourTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:previousPath] withRowAnimation:UITableViewRowAnimationFade]; 

Это обновит пользовательский интерфейс, но не забудьте удалить эту строку из вашего источника данных. Это обеспечит его полное удаление.

Надеюсь, что это поможет!

+0

: Когда я использую ваш кодовый код, он сбой и показывает: *** Завершение приложения из-за неотображенного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после того, как обновление (3) должно быть равно количеству строк, содержащихся в этом разделе перед обновлением (3), плюс или минус количество строк, вставленных или удаленных из этого раздела (вставлено 0, 1 удалено) и плюс или минус количество строк, перемещенных в или из этой секции (0 перемещено, 0 перемещено). ' – Atul

+2

Это происходит потому, что вы не обновляете свой источник данных, который все еще возвращает такое же количество строк в методе 'numberOfRowsForSection:' – micantox

+0

@Atul Вы уверены, что indexPath вычисляется правильно? Также необходимо удалить конкретную строку из источника данных. – Amar