Ios 更改UITableViewCell中某些子视图的高亮显示

Ios 更改UITableViewCell中某些子视图的高亮显示,ios,uitableview,Ios,Uitableview,是否可以将UITableViewCell中的某些子视图排除在高亮显示之外,或更改其高亮显示实现 在某些情况下,我在UITableViewCell中添加了一个橙色警告标签,它与单元格的其余部分一起正确高亮显示,这很好。但是,当单元格停止以动画方式高亮显示时,首先会看到警告标签的背景变为白色,然后闪烁为橙色。 我希望将其从高亮显示中排除,或者更改其高亮显示实现,使其动画恢复为橙色。如果superview需要,则似乎不可能将视图从高亮显示中排除。但是,如果您只是停止任何高亮显示行为或将其更改为您的规范

是否可以将UITableViewCell中的某些子视图排除在高亮显示之外,或更改其高亮显示实现

在某些情况下,我在UITableViewCell中添加了一个橙色警告标签,它与单元格的其余部分一起正确高亮显示,这很好。但是,当单元格停止以动画方式高亮显示时,首先会看到警告标签的背景变为白色,然后闪烁为橙色。
我希望将其从高亮显示中排除,或者更改其高亮显示实现,使其动画恢复为橙色。

如果superview需要,则似乎不可能将视图从高亮显示中排除。但是,如果您只是停止任何高亮显示行为或将其更改为您的规范,则覆盖其设置高亮显示:可以得到相同的结果。

您无法从动画中删除某些子视图,但可以按如下方式更改某些行为:

避免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,它可以满足我的需要。

在iOS 6中,您可以使用
UITableViewDelegate
中的两种方法来自定义单元格的高亮显示,以及它的子视图:

- (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]];
    }];
}
我没有显示更改子视图的代码


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

为了在表视图单元格上具有自定义高亮显示行为,请覆盖setHighlighted方法并在super方法中解析highlighted:false,并自定义指定哪些视图应根据下面的highlight属性更改颜色

到目前为止,我已经发现覆盖setHighlight:animated:并立即返回会取消启动highlighted。但当我按下单元格时,突出显示仍然会使标签变蓝。其他地方也有类似的问题。我在这里贴了一个答案。