Ios 恢复默认UITableViewCell背景视图

Ios 恢复默认UITableViewCell背景视图,ios,uitableview,Ios,Uitableview,简而言之,我需要恢复UITableViewStyleGrouped单元格的默认backgroundView cell.backgroundView = ??; 长话短说: 我有一个带有一些单元格的分组表视图。对于每个单元格,用户需要选择一些值或进行一些输入。之后,他可以通过触摸“下一步”按钮进入下一个ViewController 无论如何,为了向用户表明他遗漏了什么,我在单元格周围显示了一个漂亮的红色边框,上面有错误/遗漏的用户输入。为此,我使用如下自定义图像设置单元格的背景视图: cell

简而言之,我需要恢复
UITableViewStyleGrouped
单元格的默认
backgroundView

cell.backgroundView = ??;

长话短说: 我有一个带有一些单元格的分组表视图。对于每个单元格,用户需要选择一些值或进行一些输入。之后,他可以通过触摸“下一步”按钮进入下一个ViewController

无论如何,为了向用户表明他遗漏了什么,我在单元格周围显示了一个漂亮的红色边框,上面有错误/遗漏的用户输入。为此,我使用如下自定义图像设置单元格的
背景视图

cell.backgroundView = myErrorIndicatingImageView;
细胞现在看起来像这样(截图,忽略星星和标签)

到目前为止还不错,这很有魅力。但在用户更正输入后,我想删除我的红色边框背景图像,然后再次显示原始背景。原始背景如下所示(截图):

这似乎是个问题

我试过几种方法

// try by setting the background to nil
cell.backgroundView = nil;
这将完全删除背景,我将丢失一个没有背景的单元格

// try it with addSubview and later remove the subview again
[cell.backgroundView addSubview:myErrorIndicatingImageView];
这没用。
myErrorIndicatingImageView
不可见。即使是
[cell.backgroundView将子视图带到前台:myErrorIndicatingImageView]
也没有帮助

现在我唯一的解决方案是为
cellforrowatinexpath
的每次调用创建一个新的
UITableViewCell
。这是可行的,但只是糟糕的代码,完全忽略了重用单元的技术

必须有一个更简单的解决方案…类似于

cell.backgroundView = [self.tableView getDefaultBackgroundView];

试试这个怎么样:

cell.backgroundView = [[UIView alloc] initWithFrame:cell.backgroundView.frame];

或者,您可以将背景视图设置为
UIImageView
,并将2个图像设置为有问题的和已修复的

假设您使用自定义表格单元格类执行此操作,将原始的
背景视图
保存在某些ivar中,然后应用新的背景。要重置背景时,请将
backgroundView
设置回原始保存的背景视图。

cell.backgroundView=[[UIView alloc]initWithFrame:cell.backgroundView.frame]
与设置
backgroundView=nil的效果相同。它完全删除了背景。使用两个UIImageView是一个解决方案,但是如果系统已经知道如何完美地绘制它,为什么要重新创建默认背景呢?默认背景看起来像什么。此外,如果您在使用nil或
UIView alloc init坐在新的
backgroundView
后尝试重新加载表视图,它可能会解决问题。我在原始问题中添加了一些屏幕截图。我的所有逻辑都已在
cellforrowatinexpath
中。因此,
cellforrowatinexpath
决定绘制哪个背景。如果我的助手方法想要更改背景,它们将调用
[self.tableView reloadData]
。因此,问题是如果
cellforrowatinexpath
之前已经创建了单元格,并且我使用
dequeueReusableCellWithIdentifier
重用了该单元格,那么似乎不可能将原始背景设置为设置了错误背景的单元格。我认为最好有两个版本的
myErrorIndicatingImageView
一个有红色背景,一个没有,在
cellforrowatinexpath
中根据需要添加一个