// // XPMonentsDetailViewController.m // xplan-ios // // Created by 冯硕 on 2022/6/22. // #import "XPMonentsDetailViewController.h" ///Third #import #import ///Tool #import "XPMonentsLayoutConfig.h" #import "ThemeColor.h" ///Model #import "MonentsInfoModel.h" #import "MonentsCommentModel.h" ///View #import "XPMonentsTableViewCell.h" #import "XPMonentsCommentTableViewCell.h" #import "XPMonentsEmptyTableViewCell.h" ///P #import "XPMonentDetailPresenter.h" #import "XPMonentsDetailProtocol.h" @interface XPMonentsDetailViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///数据源 @property (nonatomic,strong) NSMutableArray *datasource; @end @implementation XPMonentsDetailViewController - (__kindof id)createPresenter { return [[XPMonentDetailPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; [self initHeaderAndFooterRrfresh]; [self initSubViews]; [self initSubViewConstraints]; } #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; header.stateLabel.font = [UIFont systemFontOfSize:10.0]; header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; header.stateLabel.textColor = [ThemeColor secondTextColor]; header.lastUpdatedTimeLabel.textColor = [ThemeColor secondTextColor]; self.tableView.mj_header = header; MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; footer.stateLabel.textColor = [ThemeColor secondTextColor]; footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; self.tableView.mj_footer = footer; [self headerRefresh]; } - (void)headerRefresh { [self.presenter getMonentsDetail:self.monentsInfo.dynamicId]; [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; } - (void)footerRefresh { NSString *timestamp = @""; if (self.datasource.count > 0) { MonentsCommentModel * commentInfo = [self.datasource lastObject]; timestamp = commentInfo.publishTime; } [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:timestamp status:0]; } #pragma mark - Private Method - (void)initSubViews { self.title = @"详情"; [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.view); }]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (section == 0) { return 1; } return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0) { [XPMonentsLayoutConfig layoutMonentsModel:self.monentsInfo]; return self.monentsInfo.rowHeight; } else if(indexPath.section == 1) { if (self.datasource.count > 0) { MonentsCommentModel * commentInfo = [self.datasource objectAtIndex:indexPath.row]; return [XPMonentsLayoutConfig commentCommentRowHeight:commentInfo]; } else { return 400; } } return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section ==0) { XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; cell.monentsInfo = self.monentsInfo; return cell; } else { if (self.datasource.count > 0) { XPMonentsCommentTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsCommentTableViewCell class])]; cell.commentInfo = [self.datasource objectAtIndex:indexPath.row]; return cell; } else { XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; return cell; } } } #pragma mark - XPMonentsDetailProtocol - (void)getMonentsDetailSuccess:(MonentsInfoModel *)commentInfo { self.monentsInfo = commentInfo; [self.tableView reloadData]; } - (void)getMonentsCommentListSuccess:(MonentsCommentListModel *)commentInfo state:(int)state{ if (state == 0) { [self.datasource removeAllObjects]; [self.tableView.mj_header endRefreshing]; } else { [self.tableView.mj_footer endRefreshing]; } if (commentInfo.commentList.count > 0) { [self.datasource addObjectsFromArray:commentInfo.commentList]; } [self.tableView reloadData]; } #pragma mark - Getters And Setters - (UITableView *)tableView { if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.tableFooterView = [UIView new]; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.backgroundColor = [UIColor clearColor]; if (@available(iOS 11.0, *)) { _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; [_tableView registerClass:[XPMonentsCommentTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsCommentTableViewCell class])]; [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; } return _tableView; } - (NSMutableArray *)datasource { if (!_datasource) { _datasource = [NSMutableArray array]; } return _datasource; } @end