Как обнаружить жест удаления для удаления в настраиваемой ячейке UITableviewCell?

Я настроил UITableViewCell и хочу реализовать «пролистывание для удаления». Но мне не нужна кнопка удаления по умолчанию. Вместо этого я хочу сделать что-то другое. Каким будет самый простой способ реализовать это? Существуют ли какие-либо методы, которые вызываются, когда пользователь проводит пальцем, чтобы удалить ячейку? Могу ли я предотвратить появление кнопки удаления по умолчанию?

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

Может быть, мне нужно использовать UIGestureRecognizer?


person Proud Member    schedule 29.05.2011    source источник


Ответы (2)


Если вы хотите сделать что-то совершенно другое, добавьте UISwipeGestureRecognizer в каждую ячейку tableview.

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.


    UISwipeGestureRecognizer* sgr = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwiped:)];
    [sgr setDirection:UISwipeGestureRecognizerDirectionRight];
    [cell addGestureRecognizer:sgr];
    [sgr release];

    cell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row];
    // ...
    return cell;
}

- (void)cellSwiped:(UIGestureRecognizer *)gestureRecognizer {
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        UITableViewCell *cell = (UITableViewCell *)gestureRecognizer.view;
        NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];
        //..
    }
}
person Felix    schedule 29.05.2011
comment
Ответ vmanjz намного лучше, потому что вам не нужно создавать UISwipeGestureRecognizer для каждой ячейки таблицы. Как и в случае с очень большой таблицей, вы могли увидеть серьезное отставание, создающее такое количество распознавателей жестов. - person Baza207; 07.04.2014
comment
вместо этого вы можете добавить распознаватель жестов в табличное представление. посмотрите мой ответ на аналогичную проблему: stackoverflow.com/a/4604667/550177 - person Felix; 08.04.2014
comment
Одна проблема с этим подходом заключается в том, что он распознает только состояние .Ended, а не состояние .Began. - person Zack Shapiro; 02.12.2015

Вот два метода, которые можно использовать, чтобы избежать кнопки «Удалить»:

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

и

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
person vmanjz    schedule 19.08.2012
comment
Спасибо! Работал отлично! :) - person An1Ba7; 02.09.2013
comment
Также есть - (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath, если пользователь не удаляет строку - person Borzh; 02.06.2015