Пользовательская кнопка «Удалить» при редактировании в ячейке UITableView - PullRequest
21 голосов
/ 23 октября 2009

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

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

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

Ответы [ 4 ]

34 голосов
/ 20 сентября 2012

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

- (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];
            }
        }
    }
}
7 голосов
/ 04 января 2014

Это поздний ответ, но я надеюсь, что кто-то может найти это полезным. Таким образом, принятый ответ кажется мне довольно сложным, и ответ @ 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, так что вы можете добавить любую вещь, которую захотите, когда нажмете кнопку удаления. Вот мой результат:

enter image description here

1 голос
/ 24 октября 2009

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

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

0 голосов
/ 23 октября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...