2016-03-21 40 views
0

我想向我的UITableView中的第一个单元格添加一个渐变。只编辑UITableView中的第一个单元格

这里是if声明我来确定是否细胞是在表中的第一个。

if (indexPath.row == 0 && indexPath.section == 0) { 

此代码似乎并没有因为有少数细胞与梯度,尤其是与有时第二单元沿第一和最后一个单元格是工作。这很奇怪,因为我使用indexPath.row获取的信息正在从正确的位置获取信息。

为什么我的if语句不工作?即使我正在从阵列中的正确位置获取信息。

+0

我猜你需要删除梯度,如果它不是第一个单元格,因为可能出现的问题是如果一个单元格出队最初是第一个单元格,它将有梯度 –

+0

@Josh Hamet,这不应该导致一个问题,因为在我的表格中的单元格保持在相同的位置。我没有让他们换地方。 – brettf

+0

由于单元格出于性能原因而重用的事实,您必须处理其他单元格的情况(例如,设置所需的背景颜色而不是梯度) – Alladinian

回答

1

你可能不执行你的自定义的UITableViewCell子类prepareForReuse。它看起来像是正确定位第一个单元格,所以也许当该单元格稍后重新用于其他索引路径时,您并未清除之前添加的渐变。

+0

如何覆盖'prepareForReuse'使其使单元在重新添加额外图层之前将其自身重置为某一点? – brettf

+0

@brettf很难肯定地看到你的代码,但我的第一个想法是你的自定义单元格应该有一个引用它插入的渐变层的ivar。在'prepareForReuse'方法中,它会做一些像'self.gradientLayer.removeFromSuperlayer()'。为此,您的UITableViewDataSource应该只调用自定义单元格上的方法,比如'showGradient()',而不是从自定义单元格类外部插入图层。如果自定义单元类自己管理插入渐变图层,它也可以保留对其的引用并在重用时将其删除。 –

1

确保您有一个else条件与您if走。因为表格视图单元格被重用,所以如果它位于第一个单元格以外的单元格中,则需要确保删除该渐变。

if(first cell) 
    add gradient 
else 
    remove gradient if it exists 
+0

我将如何去除梯度子层? – brettf

+0

@brettf不知道你是如何设置它的,我不知道。 – Stonz2

0
  1. 如果您使用定制单元,设置自定义单元格梯度变量来清除所有,但第一个单元格颜色。

  2. 如果您使用的是标准uitableview单元格,请将默认渐变添加到每个单元格,然后如果它是第一个单元格,则将渐变颜色更改为任何需要的颜色,并将默认颜色清除。这样分配之后

  3. 备选地清洁从小区中的所有子视图:

    为(UIView的*在cell.subviews子){ [子removeFromSuperview]; }

然后为第一个单元格添加您的渐变。

选项1是最干净的。

相关问题