7

我想设置 UITableViewCell 在分组表视图中突出显示时的背景颜色。我现在使用的代码会产生这个结果。有人可以告诉我这样做的正确方法,以保持 uitableviewcell 的圆角吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.bounds] ;
    cell.selectedBackgroundView.backgroundColor = coolBlue ;
}

更新代码:

cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.bounds];
cell.selectedBackgroundView.backgroundColor = coolBlue;

UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:cell.selectedBackgroundView.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(8.0f, 8.0f)];

CAShapeLayer *shape = [[CAShapeLayer alloc] init];

[shape setPath:rounded.CGPath];

cell.selectedBackgroundView.layer.mask = shape;
rounded = nil;
shape = nil;

在此处输入图像描述

更新:

在此处输入图像描述

4

2 回答 2

7

通过使用 Bazier Path,您可以提供顶部两个或底部两个或任意数量的角半径(显然是 4 个)。

在这里,我为单元格背景视图设置左上角和右上角:

UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:cell.selectedBackgroundView.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(8.0f, 8.0f)];

CAShapeLayer *shape = [[CAShapeLayer alloc] init];

[shape setPath:rounded.CGPath];

cell.selectedBackgroundView.layer.mask = shape;
rounded = nil;
shape = nil;  
// you can change the code as per your need

现在你只想为第一个和最后一个单元格背景设置角落。

并且记得在你的项目和#import <QuartzCore/QuartzCore.h>你的类中添加 QuartzCore 框架。

您可以使用以下方式突出显示时更改 textlable 的 textcolor:

cell.textLabel.highlightedTextColor = [UIColor blackColor];
于 2013-07-20T04:59:15.263 回答
0

尝试确保单元格的 clipsToBounds 设置为 YES

http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/clipsToBounds

于 2013-07-20T03:15:23.470 回答