// // YMDynamicDetailViewController.m // MSYOUPAI // // Created by YoMi on 2024/3/21. // Copyright © 2024 MS. All rights reserved. // #import "YMDynamicDetailViewController.h" #import "YMDynamicDetailViewModel.h" #import "YMDynamicDetailInfoCell.h" #import "YMDynamicDetailCommentSectionView.h" #import "YMDynamicDetailCommentCell.h" @interface YMDynamicDetailViewController () /// 动态详情VM @property (nonatomic, strong) YMDynamicDetailViewModel *viewModel; /// 容器列表 @property (nonatomic, strong) UITableView *contentTableView; @end @implementation YMDynamicDetailViewController @dynamic viewModel; - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; } - (void)ym_setupViews { [self.view addSubview:self.contentTableView]; [self.view setNeedsUpdateConstraints]; [self.view updateConstraintsIfNeeded]; } - (void)updateViewConstraints { [self.contentTableView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(kYMNavHeight); make.left.equalTo(self.view); make.right.equalTo(self.view); make.bottom.equalTo(self.view); }]; [super updateViewConstraints]; } - (void)ym_bindViewModel { [self headerRefreshing]; @weakify(self) [[self.viewModel.refreshUISubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id result) { @strongify(self) [self.contentTableView reloadData]; switch ([result intValue]) { case YMHeaderRefresh_HasMoreData: case YMHeaderRefresh_HasNoMoreData: { [self.contentTableView.mj_header endRefreshing]; [self.contentTableView.mj_footer endRefreshing]; } break; case YMFooterRefresh_HasMoreData: { [self.contentTableView.mj_header endRefreshing]; [self.contentTableView.mj_footer endRefreshing]; if (self.contentTableView.mj_footer == self.noLoadMoreFooter) { self.contentTableView.mj_footer = self.loadMoreFooter; } } break; case YMFooterRefresh_HasNoMoreData: { [self.contentTableView.mj_header endRefreshing]; [self.contentTableView.mj_footer endRefreshing]; if (self.contentTableView.mj_footer == self.loadMoreFooter) { self.contentTableView.mj_footer = self.noLoadMoreFooter; } } break; case YMRefreshError: { [self.contentTableView.mj_header endRefreshing]; [self.contentTableView.mj_footer endRefreshing]; } break; default: break; } [self.contentTableView ym_endLoading]; }]; } #pragma mark - UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { case 1: { return self.viewModel.commentDataArray.count; } break; default: { return self.viewModel.infoDataArray.count; } break; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ switch (indexPath.section) { case 1: { YMDynamicDetailCommentCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([YMDynamicDetailCommentCell class])]; if (!cell) { cell = [[YMDynamicDetailCommentCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:NSStringFromClass([YMDynamicDetailCommentCell class])]; } cell.selectionStyle = UITableViewCellSelectionStyleNone; [cell ym_bindViewModel:self.viewModel.commentDataArray[indexPath.item]]; return cell; } break; default: { YMDynamicDetailInfoCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([YMDynamicDetailInfoCell class])]; if (!cell) { cell = [[YMDynamicDetailInfoCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:NSStringFromClass([YMDynamicDetailInfoCell class])]; } cell.selectionStyle = UITableViewCellSelectionStyleNone; [cell ym_bindViewModel:self.viewModel.infoDataArray[indexPath.item]]; return cell; } break; } } #pragma mark - UITableViewDelegate - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ switch (section) { case 1: { if (self.viewModel.commentDataArray.count > 0) { YMDynamicDetailCommentSectionView *sectionHeaderView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:NSStringFromClass([YMDynamicDetailCommentSectionView class])]; if(!sectionHeaderView){ sectionHeaderView = [[YMDynamicDetailCommentSectionView alloc] initWithReuseIdentifier:NSStringFromClass([YMDynamicDetailCommentSectionView class])]; } return sectionHeaderView; } else { return [UIView new]; } } break; default: { return [UIView new]; } break; } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { switch (section) { case 1: { if (self.viewModel.commentDataArray.count > 0) { return adapt(44); }else{ return CGFLOAT_MIN; } } break; default: { return CGFLOAT_MIN; } break; } } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return nil; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return CGFLOAT_MIN; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { } - (void)headerRefreshing{ [self.contentTableView ym_startLoading]; self.viewModel.currentPage = 1; [self.viewModel getDynamicDetailData]; [self.viewModel getDynamicDetailCommentListData]; } - (void)footerRefreshing{ [self.contentTableView ym_startLoading]; self.viewModel.currentPage++; [self.viewModel getDynamicDetailCommentListData]; } - (UITableView *)contentTableView{ if (!_contentTableView) { _contentTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain]; _contentTableView.delegate = self; _contentTableView.dataSource = self; _contentTableView.rowHeight = UITableViewAutomaticDimension; _contentTableView.estimatedRowHeight = adapt(44); _contentTableView.showsVerticalScrollIndicator = NO; _contentTableView.showsHorizontalScrollIndicator = NO; _contentTableView.separatorColor = UIColor.clearColor; _contentTableView.backgroundColor = HexColorFromRGB(0xF6F6F6); [_contentTableView registerClass:[YMDynamicDetailInfoCell class] forCellReuseIdentifier:NSStringFromClass([YMDynamicDetailInfoCell class])]; [_contentTableView registerClass:[YMDynamicDetailCommentSectionView class] forHeaderFooterViewReuseIdentifier:NSStringFromClass([YMDynamicDetailCommentSectionView class])]; [_contentTableView registerClass:[YMDynamicDetailCommentCell class] forCellReuseIdentifier:NSStringFromClass([YMDynamicDetailCommentCell class])]; _contentTableView.mj_header = self.refreshHeader; _contentTableView.mj_footer = self.noLoadMoreFooter; YMEmptyView *empty = [YMEmptyView emptyViewWithImageStr:@"ym_common_no_data_icon" titleStr:@"暂无数据" detailStr:@""]; empty.imageSize = kEmptyViewSize; _contentTableView.ym_emptyView = empty; _contentTableView.ym_emptyView.autoShowEmptyView = NO; } return _contentTableView; } @end