Измените цвет кнопки удаления красного цвета по умолчанию в UITableViewCell, когда проводите строки или нажмите кнопку редактирования.

Я хотел изменить цвет кнопки минус и удалить кнопку UITableViewCell когда нажимаете на кнопку редактирования или проводите UITableView строк. Я реализовал этот код до сих пор:

-(IBAction)doEdit:(id)sender
{

    [[self keyWordsTable] setEditing:YES animated:NO];
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {

}

5 ответов

Решение

iOS 8 и 9 ( реквизит к этому посту)


Примечание. Если вы работаете с существующим проектом iOS 7, вам нужно обновить целевую версию до iOS 8, чтобы получить эту функциональность. Также не забудьте установить UITableviewDelegate.

Вся магия теперь происходит здесь (столько кнопок, сколько вы хотите!!!!):

 -(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 1" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
    {
        NSLog(@"Action to perform with Button 1");
    }];
    button.backgroundColor = [UIColor greenColor]; //arbitrary color
    UITableViewRowAction *button2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 2" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
                                    {
                                        NSLog(@"Action to perform with Button2!");
                                    }];
    button2.backgroundColor = [UIColor blueColor]; //arbitrary color

    return @[button, button2];
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// you need to implement this method too or nothing will work:

}
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }


(IOS 7)


**activate the delete button on swipe**

// make sure you have the following methods in the uitableviewcontroller

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSLog(@"You hit the delete button.");
    }

установить пользовательскую текстовую метку вместо удаления.

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

установить пользовательский цвет для кнопки часть 1 - предупреждение, это технически включает в себя тыкать в частный API Apple. Тем не менее, вам не запрещается изменять подпредставление, используя поиск по общедоступному методу, который является частью UIKIT.

Создайте класс uitableviewcell (см. Также /questions/19053035/izmenenie-tsveta-uitableviewcelldeleteconfirmationcontrolknopka-udalit-v-uitableviewcell/19053050#19053050)

- (void)layoutSubviews
{
    [super layoutSubviews];
    for (UIView *subview in self.subviews) {
        //iterate through subviews until you find the right one...
        for(UIView *subview2 in subview.subviews){
            if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"]) {
                //your color
                ((UIView*)[subview2.subviews firstObject]).backgroundColor=[UIColor blueColor];
            }
        }
    }    
}

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

установить пользовательский цвет для кнопки часть 2

обратно в ваш uitableviewcontroller

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    [YourTableView reloadData];
}

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


Пример Swift (iOS 8)

UITableViewDelegate docs (методeditActionsForRowAtIndexPath)

Возвращаемое значение

Массив объектов UITableViewRowAction, представляющих действия для строки. Каждое предоставленное вами действие используется для создания кнопки, которую пользователь может нажать.

обсуждение

Используйте этот метод, если вы хотите предоставить настраиваемые действия для одной из строк таблицы. Когда пользователь проводит пальцем по горизонтали подряд, табличное представление перемещает содержимое строки в сторону, чтобы показать ваши действия. Нажатие на одну из кнопок действия запускает блок обработчика, сохраненный вместе с объектом действия.

Если этот метод не реализован, в табличном представлении отображаются стандартные вспомогательные кнопки, когда пользователь проводит по строке.

Рабочий пример в Swift:

@available(iOS 8.0, *)
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    let button1 = UITableViewRowAction(style: .Default, title: "Happy!") { action, indexPath in
        print("button1 pressed!")
    }
    button1.backgroundColor = UIColor.blueColor()
    let button2 = UITableViewRowAction(style: .Default, title: "Exuberant!") { action, indexPath in
        print("button2 pressed!")
    }
    button2.backgroundColor = UIColor.redColor()
    return [button1, button2]
}

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
}

Первый раз вы будете вызывать willTransitionToState в.m (customcell)

- (void)willTransitionToState:(UITableViewCellStateMask)state{
    NSLog(@"EventTableCell willTransitionToState");
    [super willTransitionToState:state];
    [self overrideConfirmationButtonColor];
}

Проверьте версию iOS, она здесь, я использую iOS 7 - iOS8

//at least iOS 8 code here
- (UIView*)recursivelyFindConfirmationButtonInView:(UIView*)view
{
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {
        // iOS 8+ code here
        for(UIView *subview in view.subviews) {

            if([NSStringFromClass([subview class]) rangeOfString:@"UITableViewCellActionButton"].location != NSNotFound)
                return subview;

            UIView *recursiveResult = [self recursivelyFindConfirmationButtonInView:subview];
            if(recursiveResult)
                return recursiveResult;
        }
    }

    else{
        // Pre iOS 8 code here
        for(UIView *subview in view.subviews) {
            if([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationButton"]) return subview;
            UIView *recursiveResult = [self recursivelyFindConfirmationButtonInView:subview];
            if(recursiveResult) return recursiveResult;
        }
    }
    return nil;


}

-(void)overrideConfirmationButtonColor
{

    dispatch_async(dispatch_get_main_queue(), ^{
        UIView *confirmationButton = [self recursivelyFindConfirmationButtonInView:self];
        if(confirmationButton)
        {
            UIColor *color = UIColorFromRGB(0xFF7373);
            confirmationButton.backgroundColor = color;

        }
    });
}

Невозможно с помощью публичного API.

Для кнопки удаления вы можете использовать пользовательскую реализацию, такую ​​как SWTableViewCell, чтобы изменить цвет кнопки, а также добавить другие.

Старый вопрос, но я уверен, что есть люди, которые поддерживают iOS 7. Чтобы изменить цвет фона кнопки удаления, вам нужно создать класс "UITableViewCell" или расширить его. тогда вы можете использовать

- (void)layoutSubviews
{
    [super layoutSubviews];
    for (UIView *subview in self.subviews) {
        for(UIView *childView in subview.subviews){
            if ([childView isKindOfClass:[UIButton class]]) {
                childView.backgroundColor = [UIColor blueColor];
            }
        }
    }
}
Другие вопросы по тегам