Размах для удаления в UITableViewCell имеет белый фон, нужно очистить - PullRequest
7 голосов
/ 02 января 2012

Я пытаюсь изменить цвет фона представления, которое появляется, когда вы проводите строку UITableViewCell, цвет фона за кнопкой «Удалить».

Я пытался изменить cell.editingAccessoryView, но ничего не сделал.

    UIView* myBackgroundView = [[UIView alloc] initWithFrame:CGRectZero];
    myBackgroundView.backgroundColor = [UIColor clearColor];
    cell.editingAccessoryView = myBackgroundView;

Есть идеи?

Ответы [ 6 ]

8 голосов
/ 06 декабря 2012

Я отвечаю на это, потому что мне потребовалось некоторое время, чтобы найти ответ, и это первая запись, которая появляется в поиске.Используя метод willDisplayCell, вы можете получить доступ к цвету фона ячеек.Обратите внимание, что [UIColor clearColor]; вернет белый цвет, поэтому измените свой код соответствующим образом.

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    cell.backgroundColor = [UIColor blackColor];

}
7 голосов
/ 08 февраля 2012

Ты почти у цели. Класс UITableViewCell имеет свойство backgroundView, которое по умолчанию равно nil. Просто создайте новый UIView, как вы сделали в своем вопросе, а затем присвойте его свойству backgroundView вашей ячейки.

cell.backgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
cell.backgroundView.backgroundColor = [UIColor clearColor];
1 голос
/ 24 мая 2012

Я думаю, это зависит от того, как вы добавляете контент в свою ячейку.

Когда я добавил содержимое в ячейку напрямую, используя [cell addSubView] или [cell.contentView addSubView], у меня возникла та же проблема.

Мой обходной путь к этому был:

Create a view
Add all your content(labels, images etc;) to this view
Finally then add the view to your cell using [cell addSubView:tmpView]

И вам больше не нужно вмешиваться в свойство backgroundView. Я попробовал это и работает отлично!

0 голосов
/ 28 июня 2019

правильно, просто чтобы все знали:

func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath) {
    for subview in tableView.subviews {
        if NSStringFromClass(type(of: subview)) == "UISwipeActionPullView", let button = subview.subviews.first, NSStringFromClass(type(of: button)) == "UISwipeActionStandardButton"
        {
            button.backgroundColor = .clear
            button.subviews.first?.backgroundColor = .clear
        }
    }
}
0 голосов
/ 30 марта 2018

iOS8 добавляет новый метод к UITableViewDelegate:

optional func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?

Вы можете создать настраиваемое UITableViewRowAction, какое устройство ваши действия строки.

Например:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteAction = UITableViewRowAction(style: .destructive, title: "Cancel", handler: { action, indexPath in 
         // DELETE ROW HERE
     })
    deleteAction.background = .green // you can change background color

    return [deleteAction]
}

Для дополнительной проверки здесь и здесь

Хороший пример использования нового API: здесь

0 голосов
/ 09 июня 2017

Хотя эти ответы верны, я чувствую, что в большинстве случаев проще просто установить цвет фона ячейки в конструкторе интерфейсов.Я имею в виду фактическое свойство цвета фона ячейки, а не ее представление содержимого.Нет смысла делать это динамически, если в любом случае это будет тот цвет, к которому относится представление контента.

...