Пользовательская кнопка «Удалить» при редактировании в ячейке UITableView

StackOverflow https://stackoverflow.com/questions/1615469

  •  06-07-2019
  •  | 
  •  

Вопрос

Я прошел этот вопрос который показывает следующий код:

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"Sagar";
}

Что если я хочу использовать собственное изображение вместо красной кнопки по умолчанию?

Это было полезно?

Решение

Лювьер прав - если вы хотите, чтобы тот же самый "удалить" метафора, вы хотите держать ее на красной кнопке, которую предоставляет Apple. Зачем это менять? Его глобально узнаваем как стандарт для кнопок удаления.

Хотя, если вы хотите что-то вроде Tweetie, где вы полностью меняете поведение смахивания, вы можете использовать что-то вроде ABTableViewCell, где вы просто рисуете в своем собственном представлении. Создайте пользовательское табличное представление, переопределите -touchesBegan: withEvent: и проверьте на наличие прикосновений. Рассчитайте дельту двух касаний (в touchesMoved: withEvent :) и переместите свой собственный вид вокруг.

Другие советы

Реализуйте этот метод в пользовательской ячейке

- (void)willTransitionToState:(UITableViewCellStateMask)state{
    [super willTransitionToState:state];
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
        for (UIView *subview in self.subviews) {
            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
                UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
                [deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
                [[subview.subviews objectAtIndex:0] addSubview:deleteBtn];
                [deleteBtn release];
            }
        }
    }
}

Это поздний ответ, но я надеюсь, что кто-то может найти это полезным. Таким образом, принятый ответ кажется мне довольно сложным, и ответ @ user1684899 работает, только если вы просто хотите изменить внешний вид кнопки удаления. Я хочу полностью изменить внешний вид кнопки удаления (т. Е. Ее рамку, положение и т. Д.), Поэтому мое решение состоит в том, чтобы добавить собственную кнопку удаления в свою пользовательскую ячейку и оставить ее изначально скрытой, и показывать ее только тогда, когда ячейка в режиме редактирования. Что еще более важно, я хочу скрыть оригинальную кнопку удаления iOS и поддерживать обратную совместимость, и вот мой трюк:

- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    [super willTransitionToState:state];
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
    {
        if (!IS_IOS_7){
            for (UIView *subview in self.subviews)
            {
                if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
                {
                    // hide original button
                    [[subview.subviews objectAtIndex:0] setHidden:YES];
                    // show my custom button
                    [self.deleteButton setHidden:NO];
                }
            }

        } else {
            for (UIView *subview in self.subviews) {
                for (UIView *subview2 in subview.subviews) {
                    if ([NSStringFromClass([subview2 class]) rangeOfString:@"Delete"].location != NSNotFound) {
                        // hide original button
                        [subview2 setHidden:YES];
                        // show my custom button
                        [self.deleteButton setHidden:NO];
                    }
                }
            }
        }
    } else {
        // hide my custom button otherwise
        [self.deleteButton setHidden:YES];
    }
}

И не забудьте добавить:

[cell.deleteButton addTarget:self action:@selector(deleteEntryAtIndexPath:) forControlEvents:UIControlEventTouchUpInside];

в cellForRowAtIndexPath , так что вы можете добавить любую вещь, которую захотите, когда нажмете кнопку удаления. Вот мой результат:

введите описание изображения здесь

Общесистемным стандартом для предполагаемого действия по списку, как вы сказали в комментарии к ответу Лювьера, будет использование вспомогательного элемента ячейки детализации (синяя стрелка в кружке), а не жест смахивания.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top