突出显示/选择时的 UITableViewCell 背景颜色
Posted
技术标签:
【中文标题】突出显示/选择时的 UITableViewCell 背景颜色【英文标题】:UITableViewCell background color when highlighted/selected 【发布时间】:2016-06-28 01:42:19 【问题描述】:我希望我的单元格文本颜色在点击时改变,而不是背景颜色。
我希望单元格背景始终为白色,只有文本颜色在选中时发生变化。
我已经看到了很多关于如何做到这一点的答案......
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor whiteColor];
[cell setSelectedBackgroundView:bgColorView];
...但是创建的视图在单元格分隔符之上运行。
并且要使用cell.textLabel.highlightedTextColor = [UIColor brownColor];
来更改textColor,我不能有cell.selectionStyle = UITableViewCellSelectionStyleNone;
,所以我需要弄清楚一些事情。
【问题讨论】:
【参考方案1】:如果你想显示单元格的分隔符,你可能需要这个:
添加此代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
...
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
cell.textLabel.highlightedTextColor = [UIColor brownColor];
UIView *backgroudView = [[UIView alloc]initWithFrame:CGRectMake(0, 1, tableView.bounds.size.width, [self tableView:tableView heightForRowAtIndexPath:indexPath] - 2)];
backgroudView.backgroundColor = [UIColor whiteColor];
UIView *placeholderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
placeholderView.backgroundColor = [UIColor clearColor];
[placeholderView addSubview:backgroudView];
cell.selectedBackgroundView = placeholderView;
...
// These codes are used to show the separatorView when the cell didSelected
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
void (^showSeparatorView)(UITableViewCell *cell) = ^(UITableViewCell *cell)
for (id obj in cell.subviews)
if([obj isKindOfClass:NSClassFromString(@"_UITableViewCellSeparatorView")])
UIView *view = (UIView *)obj;
view.hidden = NO;
;
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
showSeparatorView(cell);
if (indexPath.row > 0)
UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row - 1 inSection:indexPath.section]];
showSeparatorView(cell);
...
// These codes are used to show the separatorView when the cell didHightlight
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
void (^showSeparatorView)(UITableViewCell *cell) = ^(UITableViewCell *cell)
for (id obj in cell.subviews)
if([obj isKindOfClass:NSClassFromString(@"_UITableViewCellSeparatorView")])
UIView *view = (UIView *)obj;
view.hidden = NO;
;
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
showSeparatorView(cell);
if (indexPath.row > 0)
UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row - 1 inSection:indexPath.section]];
showSeparatorView(cell);
希望这些对你有帮助!
【讨论】:
这真的很昂贵,并且使用私有 API (_UITableViewCellSeparatorView
)。一年后我们放弃了这种方法——谨慎使用。【参考方案2】:
在 cellForRowAtIndexPath 方法中添加这个,这样当你在单元格中点击而不是更改标签文本颜色时
cell.textLabel.highlightedTextColor = [UIColor brownColor];
【讨论】:
是的,我知道了,但是在被点击的单元格上没有显示分隔符的部分呢?【参考方案3】:你可以用这个-
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *c = [tableView cellForRowAtIndexPath:indexPath];
[c.textLabel setTextColor:[UIColor brownColor]];
【讨论】:
【参考方案4】:您可以添加代码cell.selectedBackgroundView = [UIView new];
来解决这个问题。使用此方法,您不需要cell.selectionStyle = UITableViewCellSelectionStyleNone;
。
【讨论】:
以上是关于突出显示/选择时的 UITableViewCell 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何选择并突出显示 UICollectionView,如 UITableViewCell?
UITableViewCell 不会在 swift 中保持突出显示