Files
2026-07-13 12:35:01 +08:00

250 lines
9.3 KiB
Objective-C

//
// TLExpressionChosenViewController.m
// TLChat
//
// Created by 李伯坤 on 16/4/4.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLExpressionChosenViewController.h"
#import "TLExpressionSearchResultViewController.h"
#import "TLSearchController.h"
#import "TLExpressionGroupModel+ChosenRequest.h"
#import "TLExpressionHelper.h"
#import "TLExpressionChosenAngel.h"
#import "TLExpressionDetailViewController.h"
typedef NS_ENUM(NSInteger, TLExpressionChosenSectionType) {
TLExpressionChosenSectionTypeBanner,
TLExpressionChosenSectionTypeRec,
TLExpressionChosenSectionTypeChosen,
};
@interface TLExpressionChosenViewController () <UISearchBarDelegate>
@property (nonatomic, assign) NSInteger pageIndex;
/// 列表
@property (nonatomic, strong) UITableView *tableView;
/// 列表管理器
@property (nonatomic, strong) TLExpressionChosenAngel *tableViewAngel;
/// 请求队列
@property (nonatomic, strong) ZZFLEXRequestQueue *requestQueue;
/// 搜索
@property (nonatomic, strong) TLSearchController *searchController;
@end
@implementation TLExpressionChosenViewController
- (void)loadView
{
[super loadView];
[self p_loadUI];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 更新表情状态
[self.tableView reloadData];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[TLUIUtility hiddenLoading];
}
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
if (!CGRectEqualToRect(self.view.bounds, self.tableView.frame)) {
[self.tableView setFrame:self.view.bounds];
self.tableViewAngel.updateCells.all();
[self.tableView reloadData];
}
}
#pragma mark - # Requests
- (void)requestDataIfNeed
{
if (self.tableViewAngel.sectionForTag(TLExpressionChosenSectionTypeChosen).dataModelArray.count > 0) {
return;
}
if (self.requestQueue.isRuning) {
return;
}
self.requestQueue = [[ZZFLEXRequestQueue alloc] init];
[self.requestQueue addRequestModel:self.bannerRequestModel];
[self.requestQueue addRequestModel:self.recommentRequestModel];
[self.requestQueue addRequestModel:[self listRequestModelWithPageIndex:1]];
[TLUIUtility showLoading:nil];
[self.requestQueue runAllRequestsWithCompleteAction:^(NSArray *data, NSInteger successCount, NSInteger failureCount) {
[TLUIUtility hiddenLoading];
}];
}
#pragma mark - # Event Action
- (void)didSelectedExpressionGroup:(TLExpressionGroupModel *)groupModel
{
TLExpressionDetailViewController *detailVC = [[TLExpressionDetailViewController alloc] initWithGroupModel:groupModel];
PushVC(detailVC);
}
#pragma mark - # Private Methods
- (void)p_loadUI
{
/// 初始化列表
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
self.tableView.zz_make.backgroundColor([UIColor whiteColor])
.separatorStyle(UITableViewCellSeparatorStyleNone)
.tableHeaderView(self.searchController.searchBar)
.tableFooterView([UIView new])
.estimatedRowHeight(0).estimatedSectionFooterHeight(0).estimatedSectionHeaderHeight(0);
[self.view addSubview:self.tableView];
/// 初始化列表管理器
self.tableViewAngel = [[TLExpressionChosenAngel alloc] initWithHostView:self.tableView];
/// 初始化基本模块
self.tableViewAngel.addSection(TLExpressionChosenSectionTypeBanner);
self.tableViewAngel.addSection(TLExpressionChosenSectionTypeRec);
self.tableViewAngel.addSection(TLExpressionChosenSectionTypeChosen);
}
#pragma mark - # Getter
- (TLSearchController *)searchController
{
if (!_searchController) {
@weakify(self);
TLExpressionSearchResultViewController *searchResultVC = [[TLExpressionSearchResultViewController alloc] init];
[searchResultVC setItemClickAction:^(TLExpressionSearchResultViewController *searchController, id data) {
@strongify(self);
[self.searchController setActive:NO];
[self didSelectedExpressionGroup:data];
}];
_searchController = [TLSearchController createWithResultsContrller:searchResultVC];
[_searchController.searchBar setPlaceholder:LOCSTR(@"搜索表情")];
}
return _searchController;
}
- (ZZFLEXRequestModel *)bannerRequestModel
{
@weakify(self);
ZZFLEXRequestModel *requestModel = [ZZFLEXRequestModel requestModelWithTag:TLExpressionChosenSectionTypeBanner requestAction:^(ZZFLEXRequestModel *requestModel) {
[TLExpressionGroupModel requestExpressionChosenBannerSuccess:^(id successData) {
[requestModel executeRequestCompleteMethodWithSuccess:YES data:successData];
} failure:^(id failureData) {
[requestModel executeRequestCompleteMethodWithSuccess:NO data:failureData];
}];
} requestCompleteAction:^(ZZFLEXRequestModel *requestModel) {
@strongify(self);
if (!self) return;
self.tableViewAngel.sectionForTag(TLExpressionChosenSectionTypeBanner).clear();
if (requestModel.success) {
self.tableViewAngel.addCell(@"TLExpressionBannerCell").toSection(requestModel.tag).withDataModel(requestModel.data).eventAction(^id (NSInteger eventType, id data) {
@strongify(self);
[self didSelectedExpressionGroup:data];
return nil;
});
}
else {
[TLUIUtility showErrorHint:requestModel.data];
}
[self.tableView reloadData];
}];
return requestModel;
}
- (ZZFLEXRequestModel *)recommentRequestModel
{
@weakify(self);
ZZFLEXRequestModel *requestModel = [ZZFLEXRequestModel requestModelWithTag:TLExpressionChosenSectionTypeRec requestAction:^(ZZFLEXRequestModel *requestModel) {
[TLExpressionGroupModel requestExpressionRecommentListSuccess:^(id successData) {
[requestModel executeRequestCompleteMethodWithSuccess:YES data:successData];
} failure:^(id failureData) {
[requestModel executeRequestCompleteMethodWithSuccess:NO data:failureData];
}];
} requestCompleteAction:^(ZZFLEXRequestModel *requestModel) {
@strongify(self);
if (!self) return;
self.tableViewAngel.sectionForTag(requestModel.tag).clear();
if (requestModel.success) {
self.tableViewAngel.setHeader(@"TLExpressionTitleView").withDataModel(LOCSTR(@"推荐表情")).toSection(requestModel.tag);
[[TLExpressionHelper sharedHelper] updateExpressionGroupModelsStatus:requestModel.data];
self.tableViewAngel.addCells(@"TLExpressionItemCell").withDataModelArray(requestModel.data).toSection(requestModel.tag).selectedAction(^ (id data) {
@strongify(self);
[self didSelectedExpressionGroup:data];
});
}
[self.tableView reloadData];
}];
return requestModel;
}
- (ZZFLEXRequestModel *)listRequestModelWithPageIndex:(NSInteger)pageIndex
{
self.pageIndex = pageIndex;
@weakify(self);
ZZFLEXRequestModel *requestModel = [ZZFLEXRequestModel requestModelWithTag:TLExpressionChosenSectionTypeChosen requestAction:^(ZZFLEXRequestModel *requestModel) {
@strongify(self);
if (!self) return;
[TLExpressionGroupModel requestExpressionChosenListByPageIndex:pageIndex success:^(id successData) {
[requestModel executeRequestCompleteMethodWithSuccess:YES data:successData];
} failure:^(id failureData) {
[requestModel executeRequestCompleteMethodWithSuccess:NO data:failureData];
}];
} requestCompleteAction:^(ZZFLEXRequestModel *requestModel) {
@strongify(self);
if (!self) return;
if (pageIndex == 1) {
}
if (requestModel.success) {
if (pageIndex == 1) {
self.tableViewAngel.sectionForTag(requestModel.tag).clear();
if ([requestModel.data count] > 0) {
self.tableViewAngel.setHeader(@"TLExpressionTitleView").withDataModel(LOCSTR(@"更多精选")).toSection(requestModel.tag);
}
[self.tableView tt_addLoadMoreFooterWithAction:^{
@strongify(self);
[[self listRequestModelWithPageIndex:self.pageIndex + 1] executeRequestMethod];
}];
}
if ([requestModel.data count] > 0) {
[[TLExpressionHelper sharedHelper] updateExpressionGroupModelsStatus:requestModel.data];
self.tableViewAngel.addCells(@"TLExpressionItemCell").withDataModelArray(requestModel.data).toSection(requestModel.tag).selectedAction(^ (id data) {
@strongify(self);
[self didSelectedExpressionGroup:data];
});
[self.tableView tt_endLoadMore];
}
else {
[self.tableView tt_showNoMoreFooter];
}
}
else {
if (pageIndex == 1) {
[self.view showErrorViewWithTitle:requestModel.data retryAction:^(id userData) {
@weakify(self);
[self requestDataIfNeed];
}];
}
else {
[self.tableView tt_showNoMoreFooter];
}
}
[self.tableView reloadData];
}];
return requestModel;
}
@end