#import <UIKit/UIKit.h>
@interface WXSegment : UIControl
//分段按钮上得标题
@property(nonatomic,readonly)NSArray *items;
//选中的索引
@property(nonatomic,assign)NSInteger selectedIndex;
//按钮上得标题字体
@property(nonatomic,retain)UIFont *font;
- (id)initWithItems:(NSArray *)items;
@end
#import "WXSegment.h"
@implementation WXSegment
{
NSMutableArray *_images;
NSMutableArray *_titles;
}
- (id)initWithItems:(NSArray *)items
{
self = [super initWithFrame:CGRectZero];
if (self) {
_items = [items retain];
[self _initViews];
}
return self;
}
//创建子视图
- (void)_initViews
{
_images = [[NSMutableArray alloc] initWithCapacity:_items.count];
_titles = [[NSMutableArray alloc] initWithCapacity:_items.count];
for (int i=0; i<self.items.count; i++) {
//1.创建item的背景视图
UIImage *img = [UIImage imageNamed:@"segment-n@2x.png"];
UIImage *highlighteImg = [UIImage imageNamed:@"segment-h@2x.png"];
UIImageView *bgView = [[UIImageView alloc] initWithImage:img highlightedImage:highlighteImg];
[self addSubview:bgView];
//2.创建item上得Label
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
titleLabel.textColor = [UIColor whiteColor];
titleLabel.font = [UIFont systemFontOfSize:14.0f];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
[bgView addSubview:titleLabel];
[_images addObject:bgView];
[_titles addObject:titleLabel];
[bgView release];
[titleLabel release];
}
}
- (void)layoutSubviews
{
[super layoutSubviews];
CGFloat itemWidth = self.width/self.items.count;
for (int i=0; i<self.items.count; i++) {
UIImageView *bgView = _images[i];
UILabel *titileLabel = _titles[i];
bgView.frame = CGRectMake(itemWidth*i, 0, itemWidth, self.height);
titileLabel.frame = bgView.bounds;
titileLabel.text = self.items[i];
if (self.font != nil) {
titileLabel.font = self.font;
}
if (i == self.selectedIndex) {
bgView.highlighted = YES;
}else{
bgView.highlighted = NO;
}
}
}
- (void)setSelectedIndex:(NSInteger)selectedIndex
{
_selectedIndex = selectedIndex;
//重新调用layoutSubviews
[self setNeedsLayout];
//发送一个事件,事件名:UIControlEventValueChanged
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
- (void)setFont:(UIFont *)font
{
if (_font != font) {
[_font release];
_font = [font retain];
//重新调用layoutSubViews
[self setNeedsLayout];
}
}
//触摸结束时调用
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];
CGFloat itemWidth = self.width/self.items.count;
CGFloat index = p.x/itemWidth;
self.selectedIndex = index;
}
@end
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
//20130901 -> data对象 -> 09月01日
// NSArray *items = [NSArray];
NSMutableArray *items = [NSMutableArray array];
for (NSString *datestring in _dates) {
NSDate *date = [UIUtils dateFromString:datestring formate:@"yyyyMMdd"];
NSString *formatestring = [UIUtils stringFromDate:date formate:@"MM月dd日"];
[items addObject:formatestring];
}
WXSegment *sg = [[WXSegment alloc] initWithItems:items];
sg.selectedIndex = _selectIndex;
[sg addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
return [sg autorelease];
}
- (void)segmentAction:(WXSegment *)sg
{
//1.记录选中的日期索引
_selectIndex = sg.selectedIndex;
//2.刷新数据,显示选中日期的场次列表
[_tableView reloadData];
}
原文:http://blog.csdn.net/xhm294304668/article/details/19426409