基于系统的封装SegmentView类
来源:互联网 发布:奥拉朱旺数据 编辑:程序博客网 时间:2024/05/16 17:48
基于系统的封装segmentView类,可以自定义item数量,选中item颜色,背景视图颜色,下划线颜色和高度,选中item下划线颜色和高度,添加左右滑动切换item事件。
图片挂了,附上简书
在MZLSegmentView.h中声明协议方法:
//协议方法
@protocol MZLSegmentViewDelegate <NSObject>@optional- (void)onSegmentClinkAtIndex:(NSInteger)index;@end@interface MZLSegmentView : UIView@property(nonatomic,weak)id<MZLSegmentViewDelegate> delegate;@property(nonatomic,strong)NSMutableArray *itemNameArr; //名字数组@property(nonatomic,assign)NSInteger currentIndex; //当前选择索引@property(nonatomic,strong)UIColor *selectLineColor; //选择粗线的颜色@property(nonatomic,strong)UIColor *bottomLineColor; //底线的颜色@property(nonatomic,strong)UIColor *fontColor; //字体颜色
//设置当前选中项
- (void)setCurrentIndexWithoutAnimation:(NSInteger)currentIndex;
//设置底部线条的高度和选择线条的高度
- (void)setBottomLineHeight:(CGFloat)bHeight SelectHeight:(CGFloat)sHeight;
@end
在MZLSegmentView.m中实现协议方法:
@interface MZLSegmentView(){ UIView *selectView; UIView *bottomView; CGFloat btHeight; CGFloat slHeight;}@end
//实现方法
@implementation MZLSegmentView- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor colorWithRed:238.0/255.0 green:238.0/255.0 blue:238.0/255.0 alpha:1.0]; btHeight = 3; slHeight = 7; bottomView = [[UIView alloc]initWithFrame:CGRectMake(0, frame.size.height - btHeight, frame.size.width, btHeight)]; bottomView.autoresizingMask = UIViewAutoresizingFlexibleWidth; bottomView.backgroundColor = [UIColor greenColor]; [self addSubview:bottomView]; selectView = [[UIView alloc]init]; selectView.autoresizingMask = UIViewAutoresizingFlexibleWidth; selectView.backgroundColor = [UIColor redColor]; [self addSubview:selectView]; UISwipeGestureRecognizer *doSwipLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doSwip:)]; doSwipLeft.direction = UISwipeGestureRecognizerDirectionLeft; [self addGestureRecognizer:doSwipLeft]; UISwipeGestureRecognizer *doSwipRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doSwip:)]; doSwipRight.direction = UISwipeGestureRecognizerDirectionRight; [self addGestureRecognizer:doSwipRight]; self.currentIndex = 0; } return self;}
//设置当前选中item的底线颜色
- (void)setSelectLineColor:(UIColor *)selectLineColor{ selectView.backgroundColor = selectLineColor;}
//设置全部底线的颜色
- (void)setBottomLineColor:(UIColor*)bottomLineColor{ bottomView.backgroundColor = bottomLineColor;}
//设置字体颜色
- (void)setFontColor:(UIColor *)fontColor{ for (int i = 0; i < _itemNameArr.count; i++) { UIButton *btn = (UIButton*)[self viewWithTag:1000 + i]; [btn setTitleColor:fontColor forState:UIControlStateNormal]; [btn setTitleColor:fontColor forState:UIControlStateHighlighted]; }}
//设置底部线条和选择线条的高度
- (void)setBottomLineHeight:(CGFloat)bHeight SelectHeight:(CGFloat)sHeight{ btHeight = bHeight; slHeight = sHeight; float fWidth = self.frame.size.width / _itemNameArr.count; selectView.frame = CGRectMake(fWidth * _currentIndex, self.frame.size.height - sHeight, fWidth, sHeight); bottomView.frame = CGRectMake(0, self.frame.size.height - bHeight, self.frame.size.width, bHeight);}
//#pragma mark -
- (void)layoutSubviews{ if (_itemNameArr && _itemNameArr.count > 0) { float fWidth = self.frame.size.width / _itemNameArr.count; selectView.frame = CGRectMake(fWidth * _currentIndex, self.frame.size.height - slHeight, fWidth, slHeight); for (int i = 0; i < _itemNameArr.count; i++) { UIButton *btn = (UIButton*)[self viewWithTag:1000 + i]; btn.frame = CGRectMake(i * fWidth, 0, fWidth, self.frame.size.height - slHeight); } }}
//左右滑动切换事件
- (void)doSwip:(id)sender{ UISwipeGestureRecognizer* gesture = (UISwipeGestureRecognizer*)sender; if (gesture.direction == UISwipeGestureRecognizerDirectionRight) { NSInteger index = --self.currentIndex; if (index < 0) index = 0; self.currentIndex = index; } else if (gesture.direction == UISwipeGestureRecognizerDirectionLeft) { NSInteger index = ++self.currentIndex; if (index > _itemNameArr.count - 1) index = _itemNameArr.count - 1; self.currentIndex = index; } if (_delegate && [_delegate respondsToSelector:@selector(onSegmentClinkAtIndex:)]) { [_delegate onSegmentClinkAtIndex:self.currentIndex]; } }
//设置itemArr数组
- (void)setItemNameArr:(NSMutableArray *)itemNameArr{ _itemNameArr = itemNameArr; if (_itemNameArr && _itemNameArr.count) { float fWidth = self.frame.size.width / _itemNameArr.count; for (int i = 0; i < _itemNameArr.count; i++) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; if (i == 0) btn.selected = YES; btn.backgroundColor = [UIColor clearColor]; btn.frame = CGRectMake(i * fWidth, 0, fWidth, self.frame.size.height - 7); btn.tag = 1000 + i; [btn setTitle:_itemNameArr[i] forState:UIControlStateNormal]; [btn setTitle:_itemNameArr[i] forState:UIControlStateHighlighted]; btn.titleLabel.font = [UIFont systemFontOfSize:15.0f]; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:btn]; } }}
//当前选中item事件
- (void)btnAction:(id)sender{ for (int i = 0; i < _itemNameArr.count; i++) { UIButton *btnTmp = (UIButton*)[self viewWithTag:1000+i]; btnTmp.selected = NO; } UIButton *btn = (UIButton*)sender; btn.selected = YES; NSInteger index = btn.tag - 1000; if (self.currentIndex == index) { return; } self.currentIndex = index;}
//当前选中索引实现代理方法
- (void)setCurrentIndex:(NSInteger)currentIndex{ if (currentIndex == _currentIndex) return; _currentIndex = currentIndex; if (self.itemNameArr && self.itemNameArr.count) { float fWidth = self.frame.size.width / self.itemNameArr.count; CGRect rect = selectView.frame; rect.origin.x = fWidth * _currentIndex; [UIView animateWithDuration:0.3 animations:^{ selectView.frame = rect; if (_delegate && [_delegate respondsToSelector:@selector(onSegmentClinkAtIndex:)]) { [_delegate onSegmentClinkAtIndex:_currentIndex]; } } completion:^(BOOL finshed){ }]; }}
//设置当前选中项
- (void)setCurrentIndexWithoutAnimation:(NSInteger)currentIndex{ if (currentIndex == _currentIndex) return; _currentIndex = currentIndex; if (self.itemNameArr && self.itemNameArr.count) { float fWidth = self.frame.size.width / self.itemNameArr.count; CGRect rect = selectView.frame; rect.origin.x = fWidth * _currentIndex; selectView.frame = rect; if (_delegate && [_delegate respondsToSelector:@selector(onSegmentClinkAtIndex:)]) { [_delegate onSegmentClinkAtIndex:_currentIndex]; } }}@end
在控制器中创建MZLSegmentView类:
- (void)viewDidLoad { [super viewDidLoad]; MZLSegmentView *segmentView = [[MZLSegmentView alloc] initWithFrame:CGRectMake(0, 64, Width, 44)]; segmentView.backgroundColor = [UIColor yellowColor]; segmentView.itemNameArr = [NSMutableArray arrayWithArray:@[@"test1",@"test2",@"test3",@"test4"]]; segmentView.delegate = (id<MZLSegmentViewDelegate>)self; [segmentView setBottomLineHeight:1 SelectHeight:3]; [self.view addSubview:segmentView];}
效果演示:
0 0
- 基于系统的封装SegmentView类
- 基于Android系统Api封装常用工具类
- 基于Android系统Api封装常用工具类
- Android SegmentView
- 自定义segmentView
- 基于DWR的Java数据封装类
- 基于amqp的PHP封装类
- 基于Gearman的PHP封装类
- 基于动画的滑动类封装
- 基于Gearman的PHP封装类
- 基于对象风格的线程类封装
- 基于AFNetWoring 封装的网络请求类
- 基于mysqli封装的数据库类
- 基于Piccaso的图片下载工具类封装
- 基于MBProgressHUD的封装
- 基于LeanTween的封装
- 基于MessageDigest的封装
- 基于jQuery的封装
- wildfly standalone 模式配置成linux 服务
- C#中的弱引用(WeakReference
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
- 字符串大小写移动位置
- 【个人作品】在SIP客户端实现服务器端的IVR(互动式语音应答,即语音导航,自动语音话务员)功能
- 基于系统的封装SegmentView类
- $.ajax()方法详解
- Android学习之SD卡写入bitmap位图
- Java监控文件夹或文件的变动
- C++:虚基类
- QT笔记:数据库总结(四)之SQL模型类-QSqlRelationalTableModel模型
- windows利用pip安装python包(numpy为例)
- Selenium, ChromeDriver 自动化测试,抓取网页元素,java
- Mysql-5.7 基于GTID主从复制