更改底部tableview单元格中的标签颜色

时间:2014-01-17 05:22:44

标签: ios objective-c cocoa-touch uitableview

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

1 个答案:

答案 0 :(得分: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数组中。