2014-01-17 57 views
0

我想实现的内容:使UITableView灰色的最底部单元格中的所有标签都变为灰色,并在向上滚动时将它们更改回原来的颜色。换句话说,一种渐变效果,就是所有的标签颜色都必须是灰色的。
我所取得的成果:在数组中添加原始颜色并试图确定哪个单元格位于底部(使用visibleCells),然后更改其标签颜色。但很多代码取决于手动确定偏移量,因此对我来说似乎很可怕。
我试过的东西:添加CAGradientLayer。但它会使细胞消失。我想让单元格中的标签变成灰色。类似但不相同。
注意:单元格是一个带标签,按钮甚至是简单的自定义单元格UITableView,我需要为所有这些地方存储颜色,然后应用灰色直到单元格位于底部。一旦它滚动起来,我将不得不重新为所有子视图重新着色。
任何人都可以提出一个更好的方法来实现这一切吗?
已添加问题:正如下面@Bamsworld所建议的那样,是否有一种混合模式可以帮助我实现这个目标,即混合模式,它会将所有底层文本渲染为灰色?我知道多种混合模式,但对其他模式只有一个模糊的想法。更改底部tableview单元格中的标签颜色

+0

你可以发布屏幕截图吗?因为它完全可怕地预测你想要的实际产量。 – Tirth

+0

对不起,但即使我没有截图。它就像在一些表格末尾看到的衰落效应一样。唯一的区别是,我不希望细胞褪色。我希望所有的内部标签变成灰色。 – SagarU

回答

0

由于的UITableViewDelegate协议符合UIScrollViewDelegate可以添加方法scrollViewDidScroll:当表滚动以检测并从该方法中处理的任何细胞变化。

实施例:(假设称为TestTable的表格视图)

// detect when it scrolls 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    // query visible cells and get how many 
    int numCellsOnShow = [[testTable visibleCells] count]; 

    // get the cell to change at bottom of table (this will be the last one in the array of visible cells) 
    UITableViewCell *cellToEdit = [[testTable visibleCells] objectAtIndex:numCellsOnShow - 1]; 
    cellToEdit.textLabel.textColor = [UIColor grayColor]; 

    // revert top and second bottom cells to prevent cell aesthetic bleeding 
    UITableViewCell *cellToRevert = [[testTable visibleCells] objectAtIndex:numCellsOnShow - 2]; 
    cellToRevert.textLabel.textColor = [UIColor blackColor]; 
    UITableViewCell *topCell = [[testTable visibleCells] objectAtIndex:0]; 
    topCell.textLabel.textColor = [UIColor blackColor]; 

}

在上面的代码我只改变了标题为textLabel颜色,但是任何数量的变化/可以进行改动。注意:如果您的表视图高度不是tableViewCell高度的倍数(假设表格中单元格的常数维度),则可能会决定灰化底部的两个单元格,因为底部单元格甚至可能几乎不可见,甚至可能几乎看不到尽管它包含在visibleCells数组中。

+0

这是我在开始时设法克服的同样的事情。我再次编辑了我的问题。尽管实现这一点很简单,但我仍面临下一部分的问题。无论如何,感谢您的快速帮助。欣赏它。 – SagarU

+0

啊我现在看到你想要去的地方。我认为你正处于正确的轨道上,并且会调整混合模式。我不确定它是否值得寻找动画特性来创造某种幻觉。 – Bamsworld