0

我有一个表格视图,可以在视图模式和编辑模式之间来回切换。我有一个单元格,我希望它在视图模式下是透明的,并且在编辑模式下看起来像一个“正常”单元格(即白色背景,圆角矩形轮廓)。基本上,当您进入和退出编辑模式时,您在联系人应用程序中看到名称单元格所做的事情是一样的。

我使用了如何创建具有透明背景的 UITableViewCell中的解决方案来获得透明背景,但我不知道如何恢复原始背景。

目前,我在 viewDidLoad 中创建了两个背景视图:

nameCellDefaultBackview = [[UIView alloc] initWithFrame:CGRectZero];
nameCellDefaultBackview.backgroundColor = [UIColor clearColor];

nameCellEditBackview = [[UIView alloc] initWithFrame:CGRectZero];
nameCellEditBackview.backgroundColor = [UIColor whiteColor];

然后我给我的单元格默认的背景视图:

nameCell.backgroundView = nameCellDefaultBackview;

在 setEditing:animated: 我根据编辑模式设置单元格的背景:

if (editing) {
    nameCell.backgroundView = nameCellEditBackview;
} else {
    nameCell.backgroundView = nameCellDefaultBackview;
}

问题是,在编辑模式下,我得到一个白色矩形而不是看起来像一个单元格的东西——这正是我所要求的,但不是我想要的:)。我尝试了其他一些事情,比如将 backgroundView 设置为 nil(这似乎 = 没有变化),并将“初始”背景视图保存在 viewDidLoad 中(这似乎不起作用,并在调试器中查看变量当我尝试将其分配给 setEditing 中的单元格时为 0x0)。

所以我想要的是在正常模式下看起来像这样:

正常模式

在编辑模式下就像这样:

编辑模式

但我目前在编辑模式下得到的是:

当前编辑视图

那么我如何获得白色背景/边框/圆角呢?

4

3 回答 3

0

如果您想在编辑模式下使用原始单元格,您应该考虑显示和隐藏单元格,而不是设置背景视图。背景视图被添加为所有其他视图后面的子视图,因此,将其设置为透明无效。参考:苹果文档

要隐藏或显示表格单元格,请参阅此帖子

于 2012-08-22T02:25:02.077 回答
0

对于编辑模式,不要设置 backgroundView。[tableView reloadData]进入编辑模式时调用并设置 backgroundViewcellForRowAtIndexPath如下:

if (!editing) {
    nameCell.backgroundView = nameCellDefaultBackview;
}
//if it is editing, then it will take the default style.

希望这可以帮助。

于 2012-08-24T04:15:34.283 回答
0

我决定稍微改变一下我的方法,现在它正在起作用:

我现在有两个单元格,而不是试图显示/隐藏一个单元格的背景:

IBOutlet UITableViewCell *nameCellViewMode;
IBOutlet UITableViewCell *nameCellEditMode;

在 viewDidLoad: 我更改了 nameCellViewMode 的背景以使其透明:

UIView *clearBackgroundView = [[UIView alloc] initWithFrame:CGRectZero];
clearBackgroundView.backgroundColor = [UIColor clearColor];

nameCellViewMode.backgroundView = clearBackgroundView;

按照 KDaker 的建议,我现在只需在 setEditing:animated: 中执行 tableView reloadData,然后在 cellForRowAtIndexPath 中执行此操作:

if (self.editing)
{
   return nameCellEditMode;
}
else
{
   return nameCellViewMode;
}
于 2012-08-24T16:29:06.343 回答