YMGreetingSettingViewController.m 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. //
  2. // YMGreetingSettingViewController.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/23.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMGreetingSettingViewController.h"
  9. #import "YMGreetingSettingViewModel.h"
  10. #import "YMGreetingSettingCell.h"
  11. @interface YMGreetingSettingViewController()<UITableViewDataSource, UITableViewDelegate>
  12. /// 打招呼设置VM
  13. @property (nonatomic, strong) YMGreetingSettingViewModel *viewModel;
  14. /// 内容列表
  15. @property (nonatomic, strong) UITableView *contentTableView;
  16. /// 新建模板按钮
  17. @property (nonatomic, strong) UIButton *createTemplateBtn;
  18. @end
  19. @implementation YMGreetingSettingViewController
  20. @dynamic viewModel;
  21. - (void)viewDidLoad {
  22. [super viewDidLoad];
  23. }
  24. - (void)viewWillAppear:(BOOL)animated{
  25. [super viewWillAppear:animated];
  26. [self headerRefreshing];
  27. }
  28. - (void)viewDidDisappear:(BOOL)animated{
  29. [super viewDidDisappear:animated];
  30. [[YMAudioPlayer sharedInstance] stop];
  31. }
  32. - (void)ym_setupViews{
  33. [self.view addSubview:self.contentTableView];
  34. [self.view addSubview:self.createTemplateBtn];
  35. [self.view setNeedsUpdateConstraints];
  36. [self.view updateConstraintsIfNeeded];
  37. }
  38. - (void)updateViewConstraints{
  39. [self.contentTableView mas_makeConstraints:^(MASConstraintMaker *make) {
  40. make.top.equalTo(self.view).offset(kYMNavHeight);
  41. make.left.equalTo(self.view);
  42. make.right.equalTo(self.view);
  43. }];
  44. [self.createTemplateBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  45. make.top.equalTo(self.contentTableView.mas_bottom).offset(adapt(10));
  46. make.left.equalTo(self.view).offset(adapt(30));
  47. make.right.equalTo(self.view).offset(adapt(-30));
  48. make.bottom.equalTo(self.view).offset(Is_iPhoneX ? adapt(-32) : adapt(-12));
  49. make.height.mas_equalTo(adapt(50));
  50. }];
  51. [super updateViewConstraints];
  52. }
  53. - (void)ym_bindViewModel{
  54. @weakify(self)
  55. [[self.viewModel.refreshUISubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id result) {
  56. @strongify(self)
  57. [self.contentTableView reloadData];
  58. switch ([result intValue]) {
  59. case YMHeaderRefresh_HasMoreData:
  60. case YMHeaderRefresh_HasNoMoreData:
  61. {
  62. [self.contentTableView.mj_header endRefreshing];
  63. [self.contentTableView.mj_footer endRefreshing];
  64. }
  65. break;
  66. case YMFooterRefresh_HasMoreData:
  67. {
  68. [self.contentTableView.mj_header endRefreshing];
  69. [self.contentTableView.mj_footer endRefreshing];
  70. if (self.contentTableView.mj_footer == self.noLoadMoreFooter) {
  71. self.contentTableView.mj_footer = self.loadMoreFooter;
  72. }
  73. }
  74. break;
  75. case YMFooterRefresh_HasNoMoreData:
  76. {
  77. [self.contentTableView.mj_header endRefreshing];
  78. [self.contentTableView.mj_footer endRefreshing];
  79. if (self.contentTableView.mj_footer == self.loadMoreFooter) {
  80. self.contentTableView.mj_footer = self.noLoadMoreFooter;
  81. }
  82. }
  83. break;
  84. case YMRefreshError: {
  85. [self.contentTableView.mj_header endRefreshing];
  86. [self.contentTableView.mj_footer endRefreshing];
  87. }
  88. break;
  89. default:
  90. break;
  91. }
  92. [self.contentTableView ym_endLoading];
  93. }];
  94. }
  95. - (void)headerRefreshing{
  96. [self.contentTableView ym_startLoading];
  97. self.viewModel.currentPage = 1;
  98. [self.viewModel getGreetingSettingListData];
  99. }
  100. - (void)footerRefreshing{
  101. [self.contentTableView ym_startLoading];
  102. self.viewModel.currentPage++;
  103. [self.viewModel getGreetingSettingListData];
  104. }
  105. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  106. return self.viewModel.listDataArray.count;
  107. }
  108. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  109. YMGreetingSettingCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([YMGreetingSettingCell class])];
  110. if (!cell) {
  111. cell = [[YMGreetingSettingCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:NSStringFromClass([YMGreetingSettingCell class])];
  112. }
  113. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  114. YMGreetingSettingCellViewModel *cellVM = self.viewModel.listDataArray[indexPath.item];
  115. @weakify(self)
  116. cellVM.refreshGreetingSettingListBlock = ^{
  117. @strongify(self)
  118. [self headerRefreshing];
  119. };
  120. [cell ym_bindViewModel:cellVM];
  121. return cell;
  122. }
  123. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  124. __weak typeof(self) weakSelf = self;
  125. CGFloat cellHeight = [tableView fd_heightForCellWithIdentifier:NSStringFromClass([YMGreetingSettingCell class]) configuration:^(id cell) {
  126. [cell ym_bindViewModel:weakSelf.viewModel.listDataArray[indexPath.item]];
  127. }];
  128. return cellHeight;
  129. }
  130. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  131. }
  132. - (UITableView *)contentTableView{
  133. if (!_contentTableView) {
  134. _contentTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
  135. _contentTableView.delegate = self;
  136. _contentTableView.dataSource = self;
  137. _contentTableView.estimatedRowHeight = 0;
  138. _contentTableView.estimatedSectionHeaderHeight = 0;
  139. _contentTableView.estimatedSectionFooterHeight = 0;
  140. _contentTableView.showsVerticalScrollIndicator = NO;
  141. _contentTableView.showsHorizontalScrollIndicator = NO;
  142. _contentTableView.separatorColor = UIColor.clearColor;
  143. _contentTableView.backgroundColor = HexColorFromRGB(0xF6F6F6);
  144. [_contentTableView registerClass:[YMGreetingSettingCell class] forCellReuseIdentifier:NSStringFromClass([YMGreetingSettingCell class])];
  145. _contentTableView.mj_header = self.refreshHeader;
  146. _contentTableView.mj_footer = self.noLoadMoreFooter;
  147. YMEmptyView *empty = [YMEmptyView emptyViewWithImageStr:@"ym_common_no_data_icon" titleStr:@"暂无数据" detailStr:@""];
  148. empty.imageSize = kEmptyViewSize;
  149. _contentTableView.ym_emptyView = empty;
  150. _contentTableView.ym_emptyView.autoShowEmptyView = NO;
  151. }
  152. return _contentTableView;
  153. }
  154. - (UIButton *)createTemplateBtn{
  155. if (!_createTemplateBtn) {
  156. _createTemplateBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  157. _createTemplateBtn.titleLabel.font = LCFont(15);
  158. [_createTemplateBtn setTitle:@"新建模板" forState:UIControlStateNormal];
  159. [_createTemplateBtn setTitleColor:MAINGRIDTitleC forState:UIControlStateNormal];
  160. [_createTemplateBtn ym_setGradientBackgroundWithColors:kMainGradColors locations:kMainGradLocation startPoint:kMainGradStartP endPoint:kMainGradEndP];
  161. _createTemplateBtn.layer.cornerRadius = adapt(8);
  162. _createTemplateBtn.layer.masksToBounds = YES;
  163. WS(weakSelf)
  164. [[[_createTemplateBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  165. [weakSelf.viewModel gotoCreateGreetingTemplate];
  166. }];
  167. }
  168. return _createTemplateBtn;
  169. }
  170. @end