HeaderViewSelectButton.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //
  2. // HeaderViewSelectButton.m
  3. // RdP2PApp
  4. //
  5. // Created by 于海波 on 15/11/5.
  6. // 修改 by Mr_zhaohy on 15/12/3.
  7. // Copyright © 2015年 Yosef Lin. All rights reserved.
  8. //
  9. #import "HeaderViewSelectButton.h"
  10. @interface HeaderViewSelectButton ()<UIScrollViewDelegate>
  11. @end
  12. @implementation HeaderViewSelectButton
  13. - (instancetype)initWithFrame:(CGRect)frame {
  14. if (self = [super initWithFrame:frame])
  15. {
  16. }
  17. return self;
  18. }
  19. - (void)showHeaderSelectViewArray:(NSArray *)array andIndex:(NSInteger)index andShowLineView:(BOOL)show andNumber:(NSInteger)number {
  20. self.number = number;
  21. self.index = index;
  22. self.showLine = show;
  23. [self createSmScrollView:array];
  24. [self createBtns];
  25. }
  26. /**
  27. * 创建小的scrollView
  28. */
  29. -(void)createSmScrollView:(NSArray *)array {
  30. self.btnArr = array;
  31. self.smScrollV = [[UIScrollView alloc]init];
  32. self.smScrollV.showsHorizontalScrollIndicator = NO;
  33. self.smScrollV.showsVerticalScrollIndicator = NO;
  34. self.smScrollV.pagingEnabled = NO;//关闭翻页
  35. self.smScrollV.bounces = YES;//打开回弹效果
  36. self.smScrollV.delegate = self;// 遵守协议
  37. //设置scrollView的contentSize = 宽度/每页btn个数*btn总数(画布的大小)
  38. self.smScrollV.contentSize = CGSizeMake(SCREEN_WIDTH/self.number*(self.btnArr.count), self.frame.size.height);
  39. [self addSubview:self.smScrollV];
  40. [self.smScrollV mas_makeConstraints:^(MASConstraintMaker *make) {
  41. make.left.bottom.right.top.offset(0);
  42. }];
  43. }
  44. /**
  45. * 创建小的scrollView上的btn
  46. */
  47. -(void)createBtns{
  48. for (int i = 0; i < self.btnArr.count; i ++)
  49. {
  50. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  51. btn.tag = 1000+i;
  52. btn.titleLabel.font = [UIFont systemFontOfSize:14];
  53. [btn setTitle:self.btnArr[i] forState:UIControlStateNormal];
  54. [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  55. [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
  56. [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
  57. [self.smScrollV addSubview:btn];
  58. [btn mas_makeConstraints:^(MASConstraintMaker *make) {
  59. make.left.equalTo(self).offset(i*SCREEN_WIDTH/self.number);
  60. make.top.equalTo(self).offset(0);
  61. if (self.showLine)
  62. {
  63. make.bottom.equalTo(self).offset(-5);
  64. }
  65. else
  66. {
  67. make.bottom.equalTo(self).offset(0);
  68. }
  69. make.width.mas_equalTo(SCREEN_WIDTH/self.number);
  70. }];
  71. if (i == self.index)
  72. {//默认选择第一个
  73. btn.selected = YES;
  74. if (self.showLine)
  75. {
  76. self.lineView = [[UIView alloc]init ];
  77. self.lineView.backgroundColor = [UIColor whiteColor];
  78. self.lineView.layer.cornerRadius = 2;
  79. self.lineView.layer.masksToBounds = YES;
  80. [self.smScrollV addSubview:self.lineView];
  81. [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) {
  82. make.centerX.equalTo(btn);
  83. make.size.mas_offset(CGSizeMake(self.lineWidth, 3));
  84. make.top.equalTo(btn.mas_bottom).offset(0);
  85. }];
  86. }
  87. // 改变btn的偏移量
  88. [self changeScrollOffset:btn];
  89. }
  90. }
  91. }
  92. /**
  93. * btn的点击事件 改变btn标题字体 颜色 大的滚动视图的偏移量 btn的偏移量
  94. */
  95. -(void)clickBtn:(UIButton*)btn{
  96. [self setbtnsColerAndFont:btn];
  97. self.changeBigScrollViewBlock((btn.tag-1000));//改变大的scrollView的偏移量 (自己实现不了 需要利用block 或者代理)
  98. [self changeScrollOffset:btn];// 改变btn的偏移量
  99. }
  100. /**
  101. * 修改btn的大小和颜色
  102. */
  103. -(void)setbtnsColerAndFont:(UIButton*)btn{
  104. for (UIButton *button in self.smScrollV.subviews)
  105. {
  106. if ([button isKindOfClass:[UIButton class]])
  107. {
  108. if (button == btn)
  109. {
  110. button.selected = YES;
  111. [self.lineView mas_remakeConstraints:^(MASConstraintMaker *make) {
  112. make.centerX.equalTo(btn);
  113. make.size.mas_offset(CGSizeMake(self.lineWidth, 3));
  114. make.top.equalTo(btn.mas_bottom).offset(0);
  115. }];
  116. }
  117. else
  118. {
  119. button.selected = NO;
  120. }
  121. }
  122. }
  123. }
  124. /**
  125. * 修改btn的偏移量
  126. */
  127. -(void)changeScrollOffset:(UIButton*)btn {
  128. if (btn.tag > 1001 && btn.tag < (1000 + self.btnArr.count) - 2)
  129. {
  130. [self.smScrollV setContentOffset:CGPointMake(btn.frame.origin.x - btn.frame.size.width*2, 0) animated:YES];
  131. }
  132. }
  133. @end