更改 UITableViewCell 中某些子视图的突出显示

Posted

技术标签:

【中文标题】更改 UITableViewCell 中某些子视图的突出显示【英文标题】:Change highlighting of certain subviews in a UITableViewCell 【发布时间】:2011-11-25 09:47:44 【问题描述】:

是否可以排除 UITableViewCell 中的某些子视图被突出显示或更改它们的突出显示实现?

我在某些情况下向 UITableViewCell 添加了一个橙色警告标签,它与单元格的其余部分一起正确突出显示,这很好。但是,当单元格停止以动画方式突出显示时,您首先会看到警告标签的背景变为白色,然后闪烁为橙色。 我希望它完全被排除在突出显示之外,或者更改它的突出显示实现,以便它正确地动画回橙色。

【问题讨论】:

到目前为止,我已经发现覆盖 setHighlight:animated: 并立即返回会取消开始突出显示。但是当我按下单元格时,高亮仍然会将标签变为蓝色。 其他地方也有类似的问题。我在这里发布了答案***.com/a/36886209/81388。 【参考方案1】:

如果超级视图需要,似乎无法将视图排除在突出显示之外。但是,如果您只是停止那里的任何突出显示行为或将其更改为您的规范,则覆盖他们的 setHighlighted: 可以得到相同的结果。

【讨论】:

【参考方案2】:

ios 6 中,您可以使用 UITableViewDelegate 中的 2 种方法来自定义单元格和子视图的突出显示:

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor lightGrayColor]];


- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [UIView animateWithDuration:0.5f animations:^
        [cell setBackgroundColor:[UIColor whiteColor]];
    ];

我没有显示更改子视图的代码。

但是您可以像为每个单元格配置的方式一样执行类似的操作,使用单元格viewWithTag 访问子视图,然后更改背景或任何其他属性。

【讨论】:

【参考方案3】:

您不能从动画中删除某些子视图,但您可以更改一些行为,如下所示:

避免 UITableViewCell 做这样的高亮动画:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

当一个单元格被选中时,像这个例子一样手动改变背景:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    [cell setBackgroundColor:[UIColor purpleColor]];

    [UIView animateWithDuration:0.5f animations:^
            [cell setBackgroundColor:[UIColor clearColor]];
    ];


我有一个简单的 UITableView,它可以满足我的需要。

【讨论】:

【参考方案4】:

为了在表格视图单元格上具有自定义突出显示行为,重写 setHighlighted 方法并将 highlight:false 解析为 super 方法,并根据下面的突出显示属性自定义指定哪些视图应更改颜色

【讨论】:

以上是关于更改 UITableViewCell 中某些子视图的突出显示的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 选择样式更改所有子视图的背景颜色

TextField 子视图未通过 UITableViewCell 框架大小更改调整大小

UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度

当 UIStackView 更改其排列的子视图时,UITableViewCell 不会调整大小

点击单元格后不同的 UITableViewCell 子视图布局

选择时 UITableViewCell 背景颜色中的目标 c 子视图