ASOrderListViewController.m 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. //
  2. // ASOrderListViewController.m
  3. // Asteria
  4. //
  5. // Created by iOS on 2024/5/13.
  6. //
  7. #import "ASOrderListViewController.h"
  8. #import "ASOrderListSubController.h"
  9. @interface ASOrderListViewController () <UIScrollViewDelegate>
  10. @property (nonatomic, strong) NSArray <NSString *>*titles;
  11. @property (nonatomic, strong) NSArray <NSString *>*statuses;
  12. @property (nonatomic, strong) NSArray <UIButton *>*topBtns;
  13. @property (nonatomic, strong) NSArray <UIView *>*views;
  14. @property (nonatomic, strong) NSArray <ASOrderListSubController *>*vcs;
  15. @property (nonatomic, strong) UIView *topBgV;
  16. @property (nonatomic, strong) UIScrollView *topScrollV;
  17. @property (nonatomic, strong) UIView *bottomBgV;
  18. @property (nonatomic, strong) UIScrollView *scrollV;
  19. @end
  20. @implementation ASOrderListViewController
  21. - (void)viewDidLoad {
  22. [super viewDidLoad];
  23. self.titleStr = @"Orders";
  24. [self setNavRightSearch:^{
  25. }];
  26. self.statusBgV.backgroundColor = Col_FFF;
  27. self.customNavBar.backgroundColor = Col_FFF;
  28. [self loadSubV];
  29. }
  30. // MARK: - funcs
  31. - (void)getBaseData {
  32. self.titles = @[@"ALL", @"PENDING", @"PROCESSING", @"COMPLETE", @"CLOSED", @"CANCELED"];
  33. self.statuses = @[@"all", @"pending", @"processing", @"complete", @"closed", @"canceled"];
  34. NSMutableArray *vcs = [NSMutableArray array];
  35. NSMutableArray *views = [NSMutableArray array];
  36. NSMutableArray *btns = [NSMutableArray array];
  37. for (int i=0; i<self.titles.count; i++) {
  38. if (self.titles.count <= i || self.statuses.count <= i) {
  39. return;
  40. }
  41. NSString *status = self.statuses[i];
  42. NSString *title = self.titles[i];
  43. ASOrderListSubController *vc = [[ASOrderListSubController alloc] init];
  44. vc.status = status;
  45. [self addChildViewController:vc];
  46. [vcs addObject:vc];
  47. UIView *bgV = [self getSubBgV];
  48. [views addObject:bgV];
  49. UIButton *bt = [self getTopBt:title index:i];
  50. [btns addObject:bt];
  51. [self.topScrollV addSubview:bt];
  52. [self.scrollV addSubview:bgV];
  53. CGRect titleRect = [title boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 18) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: [UIFont fontWithName:Rob_Bold size:12]} context:nil];
  54. CGFloat titleW = titleRect.size.width + 30;
  55. if (titleW < 60) {
  56. titleW = 60;
  57. }
  58. [bt mas_makeConstraints:^(MASConstraintMaker *make) {
  59. make.width.equalTo(@(titleW));
  60. make.height.equalTo(@40);
  61. make.top.equalTo(@10);
  62. if (i == 0) {
  63. make.leading.equalTo(self.topScrollV.mas_leading).offset(10);
  64. } else {
  65. if (i-1 >= btns.count) {
  66. return;
  67. }
  68. UIButton *lastBt = btns[i-1];
  69. make.leading.equalTo(lastBt.mas_trailing).offset(10);
  70. }
  71. if (i == self.titles.count-1) {
  72. make.trailing.equalTo(self.topScrollV.mas_trailing).offset(-10);
  73. }
  74. }];
  75. IPhoneXHeigh;
  76. [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
  77. make.width.equalTo(@(SCREEN_WIDTH));
  78. make.height.equalTo(@(SCREEN_HEIGHT-kCustomNavBarH-StatusHeight-securityBottom_H-70));
  79. make.top.bottom.equalTo(self.scrollV);
  80. if (i == 0) {
  81. make.leading.equalTo(self.scrollV);
  82. } else {
  83. if (i-1 >= views.count) {
  84. return;
  85. }
  86. UIView *lastv = views[i-1];
  87. make.leading.equalTo(lastv.mas_trailing);
  88. }
  89. if (i == self.titles.count-1) {
  90. make.trailing.equalTo(self.scrollV);
  91. }
  92. }];
  93. }
  94. self.vcs = vcs;
  95. self.views = views;
  96. self.topBtns = btns;
  97. if (self.defualtIndex < self.topBtns.count) {
  98. UIButton *bt = self.topBtns[self.defualtIndex];
  99. [self topBtAction:bt];
  100. }
  101. }
  102. // MARK: - actions
  103. - (void)topBtAction:(UIButton *)bt {
  104. NSInteger index = bt.tag - 10000;
  105. if (self.topBtns.count <= index) {
  106. return;
  107. }
  108. for (UIButton *tempBt in self.topBtns) {
  109. BOOL isSelect = tempBt.tag == bt.tag;
  110. tempBt.selected = isSelect;
  111. tempBt.backgroundColor = isSelect ? _113632 : Col_FFF;
  112. tempBt.titleLabel.font = [UIFont fontWithName:isSelect ? Rob_Bold : Rob_Regular size:12];
  113. }
  114. [self.scrollV setContentOffset:CGPointMake(KScreenWidth*index, 0) animated:true];
  115. if (self.vcs.count <= index || self.views.count <= index) {
  116. return;
  117. }
  118. ASOrderListSubController *tempVc = [self.vcs objectAtIndex:index];
  119. UIView *v = self.views[index];
  120. if (tempVc.view.superview == nil) {
  121. [v addSubview:tempVc.view];
  122. [tempVc.view mas_makeConstraints:^(MASConstraintMaker *make) {
  123. make.edges.equalTo(v);
  124. }];
  125. [tempVc didMoveToParentViewController:self];
  126. } else {
  127. // 刷新子页面数据
  128. [tempVc refreshListData];
  129. }
  130. }
  131. - (void)loadSubV {
  132. [self.view addSubview:self.topBgV];
  133. [self.view addSubview:self.bottomBgV];
  134. [self.topBgV addSubview:self.topScrollV];
  135. [self.bottomBgV addSubview:self.scrollV];
  136. [self.topBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  137. make.top.equalTo(self.customNavBar.mas_bottom);
  138. make.leading.trailing.equalTo(self.view);
  139. make.height.equalTo(@60);
  140. }];
  141. [self.bottomBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  142. make.top.equalTo(self.topBgV.mas_bottom);
  143. make.leading.trailing.bottom.equalTo(self.view);
  144. }];
  145. [self.scrollV mas_makeConstraints:^(MASConstraintMaker *make) {
  146. make.top.equalTo(self.bottomBgV).offset(10);
  147. make.leading.trailing.bottom.equalTo(self.bottomBgV);
  148. }];
  149. [self.topScrollV mas_makeConstraints:^(MASConstraintMaker *make) {
  150. make.edges.equalTo(self.topBgV);
  151. }];
  152. [self getBaseData];
  153. }
  154. // MARK: - subvs
  155. - (UIView *)getSubBgV {
  156. UIView *v = [UIView baseV];
  157. v.backgroundColor = UIColor.clearColor;
  158. return v;
  159. }
  160. - (UIView *)topBgV {
  161. if (!_topBgV) {
  162. UIView *v = [UIView baseV];
  163. v.backgroundColor = _F8F8F8;
  164. _topBgV = v;
  165. }
  166. return _topBgV;
  167. }
  168. - (UIView *)bottomBgV{
  169. if (!_bottomBgV) {
  170. UIView *v = [UIView baseV];
  171. v.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight);
  172. v.backgroundColor = _F8F8F8;
  173. _bottomBgV = v;
  174. }
  175. return _bottomBgV;
  176. }
  177. - (UIButton *)getTopBt:(NSString *)title index:(NSInteger)index {
  178. UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
  179. [bt addTarget:self action:@selector(topBtAction:) forControlEvents:UIControlEventTouchUpInside];
  180. bt.tag = index + 10000;
  181. bt.backgroundColor = _113632;
  182. bt.titleLabel.font = [UIFont fontWithName:Rob_Bold size:12];
  183. bt.layer.cornerRadius = 4;
  184. bt.layer.masksToBounds = true;
  185. [bt setTitleColor:Col_000 forState:UIControlStateNormal];
  186. [bt setTitleColor:Col_FFF forState:UIControlStateSelected];
  187. [bt setTitle:title forState:UIControlStateNormal];
  188. return bt;
  189. }
  190. - (UIScrollView *)scrollV {
  191. if (!_scrollV) {
  192. UIScrollView *v = [[UIScrollView alloc] init];
  193. v.showsVerticalScrollIndicator = false;
  194. v.showsHorizontalScrollIndicator = false;
  195. v.delegate = self;
  196. v.pagingEnabled = true;
  197. v.backgroundColor = UIColor.clearColor;
  198. v.alwaysBounceHorizontal = true;
  199. _scrollV = v;
  200. }
  201. return _scrollV;
  202. }
  203. - (UIScrollView *)topScrollV {
  204. if (!_topScrollV) {
  205. UIScrollView *v = [[UIScrollView alloc] init];
  206. v.showsVerticalScrollIndicator = false;
  207. v.showsHorizontalScrollIndicator = false;
  208. v.backgroundColor = UIColor.clearColor;
  209. v.alwaysBounceHorizontal = true;
  210. _topScrollV = v;
  211. }
  212. return _topScrollV;
  213. }
  214. - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
  215. NSInteger index = (NSInteger)(scrollView.contentOffset.x/SCREEN_WIDTH);
  216. if (self.topBtns.count <= index) {
  217. return;
  218. }
  219. UIButton *bt = self.topBtns[index];
  220. [self topBtAction:bt];
  221. }
  222. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  223. NSInteger index = (NSInteger)(scrollView.contentOffset.x/SCREEN_WIDTH);
  224. if (self.topBtns.count <= index) {
  225. return;
  226. }
  227. UIButton *bt = self.topBtns[index];
  228. [self topBtAction:bt];
  229. }
  230. @end