首页 > 其他 > 详细

自定义分段Segment的用法

时间:2014-02-19 16:44:35      阅读:414      评论:0      收藏:0      [点我收藏+]

#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对象 -> 0901

//    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:@"MMdd"];

        [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];

}





自定义分段Segment的用法

原文:http://blog.csdn.net/xhm294304668/article/details/19426409

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!