在UITableViewCell中滑动到删除具有白色背景,需要清除

时间:2012-01-01 22:54:14

标签: iphone ios uitableview uicolor

我正在尝试更改当您滑动UITableViewCell行时显示的视图的背景颜色,即“删除”按钮背后的背景颜色。

我尝试更改了cell.editingAccessoryView,但没有做任何事情。

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

有什么想法吗?

6 个答案:

答案 0 :(得分:8)

我正在回答这个问题,因为我花了一些时间才找到答案,这是搜索中出现的第一个条目。通过使用willDisplayCell方法,您可以访问单元格背景颜色。请注意,[UIColor clearColor];将返回白色,因此请相应调整代码。

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

    cell.backgroundColor = [UIColor blackColor];

}

答案 1 :(得分:7)

你快到了。 UITableViewCell类具有backgroundView属性,默认为nil。只需在问题中创建一个新的UIView,然后将其分配给您单元格的backgroundView属性。

cell.backgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
cell.backgroundView.backgroundColor = [UIColor clearColor];

答案 2 :(得分:1)

我认为这取决于您在单元格中添加内容的方式。

当我使用[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属性。我试过这个并且完美无缺!

答案 3 :(得分:0)

虽然这些答案是正确的,但我觉得在大多数情况下,只需在界面构建器中设置单元格的背景颜色即可。我的意思是单元格的实际背景颜色属性,而不是它的内容视图。如果它始终是内容视图的颜色,那么没有理由动态地进行动态。

答案 4 :(得分:0)

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]
}

有关支票herehere

的更多信息

使用新API的好例子:here

答案 5 :(得分:0)

正确的方法,只是让大家知道:

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
        }
    }
}