为UITableViewCell分组设置选择样式BackgroundColor

时间:2013-07-20 02:48:02

标签: objective-c cocoa-touch uitableview

我想在分组的tableview中突出显示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;

enter image description here

更新

enter image description here

2 个答案:

答案 0 :(得分: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

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

并且请记住在您的项目中添加QuartzCore Framework并在您的课程中添加#import <QuartzCore/QuartzCore.h>

您可以使用以下方式更改textlable的textcolor:

cell.textLabel.highlightedTextColor = [UIColor blackColor];

答案 1 :(得分:0)