Я знаю, что на это уже ответили, но у меня были проблемы с получением линии, чтобы нарисовать градиент.Я полагал, что могут быть другие, у которых есть та же самая проблема, так вот, как я решил ее.Это работает для iOS 4x
CustomTableViewSectionHeaderWithLine.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface CustomTableViewSectionHeaderWithLine : UIView {
UIColor *topColor;
UIColor *bottomColor;
UIColor *lineColor;
}
@property(nonatomic, retain) UIColor *topColor, *bottomColor, *lineColor;
@end
CustomTableViewSectionHeaderWithLine.m
#import "CustomTableViewSectionHeaderWithLine.h"
@implementation CustomTableViewSectionHeaderWithLine
@synthesize topColor;
@synthesize bottomColor;
@synthesize lineColor;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Set the colors to something heinous so if you forget you can know immediately
if ([self topColor] == nil) topColor = [UIColor greenColor];
if ([self bottomColor] == nil) bottomColor = [UIColor yellowColor];
if ([self lineColor] == nil) lineColor = [UIColor redColor];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
//[super drawRect:rect];
//add a gradient:
CAGradientLayer *gradientLayer = [[[CAGradientLayer alloc] init] autorelease];
[gradientLayer setBounds:[self bounds]];
CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height -1);
[gradientLayer setFrame:newRect];
[gradientLayer setColors:[NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil]];
[[self layer] insertSublayer:gradientLayer atIndex:0];
//draw line
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
// This gets the RGB Float values from the color initialized for lineColor
const float* colors = CGColorGetComponents( lineColor.CGColor );
CGContextSetRGBStrokeColor(ctx, colors[0], colors[1], colors[2], 1);
//CGContextSetGrayStrokeColor(ctx, 0, 1);
CGContextMoveToPoint(ctx, 0, rect.size.height);
CGContextAddLineToPoint( ctx, rect.size.width, rect.size.height);
CGContextStrokePath(ctx);
}
- (void)dealloc
{
[super dealloc];
}
@end
Использование (Реализуйте эти два метода в TableViewDelegate
- (UIView *) tableView:(UITableView *) tableView viewForHeaderInSection:(NSInteger)section {
CustomTableViewSectionHeaderWithLine *customView = [[[CustomTableViewSectionHeaderWithLine alloc] initWithFrame:CGRectMake(0.0, 0.0, 360.0, 25.0)] autorelease];
[customView setTopColor:[UIColor whiteColor]];
[customView setBottomColor:[UIColor blackColor]];
[customView setLineColor:[UIColor whiteColor]];
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width - 10, 18)] autorelease];
label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];
label.textColor = [UIColor blackColor];
label.backgroundColor = [UIColor clearColor];
[customView addSubview:label];
return customView;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 25;
}