feat: 添加 EPMomentPublishViewController 以支持图文发布功能
主要变更: 1. 新增 EPMomentPublishViewController.h 和 EPMomentPublishViewController.m 文件,提供图文发布页面的 UI 和逻辑。 2. 实现了发布按钮、文本输入框、图片选择功能,支持最多选择 9 张图片。 3. 集成了 TZImagePickerController 以便于用户选择图片。 4. 更新了 EPMomentViewController,添加了跳转到发布页面的逻辑。 此功能旨在提升用户体验,简化图文发布流程。
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "EPMomentListView.h"
|
||||
#import "EPMomentCell.h"
|
||||
#import <MJRefresh/MJRefresh.h>
|
||||
|
||||
|
||||
@interface EPMomentListView () <UITableViewDelegate, UITableViewDataSource>
|
||||
@@ -16,9 +17,8 @@
|
||||
@property (nonatomic, strong) UIRefreshControl *refreshControl;
|
||||
@property (nonatomic, strong) NSMutableArray *mutableRawList;
|
||||
@property (nonatomic, strong) EPMomentAPIHelper *api;
|
||||
@property (nonatomic, assign) NSInteger currentPage;
|
||||
@property (nonatomic, assign) BOOL isLoading;
|
||||
|
||||
@property (nonatomic, copy) NSString *nextID;
|
||||
@end
|
||||
|
||||
@implementation EPMomentListView
|
||||
@@ -29,7 +29,6 @@
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
_api = [[EPMomentAPIHelper alloc] init];
|
||||
_mutableRawList = [NSMutableArray array];
|
||||
_currentPage = 0; // 若后端从1开始,这里会在首次请求时自增到1
|
||||
_sourceType = EPMomentListSourceTypeRecommend;
|
||||
|
||||
[self addSubview:self.tableView];
|
||||
@@ -45,9 +44,10 @@
|
||||
}
|
||||
|
||||
- (void)reloadFirstPage {
|
||||
self.currentPage = 0;
|
||||
self.nextID = @"";
|
||||
[self.mutableRawList removeAllObjects];
|
||||
[self.tableView reloadData];
|
||||
[self.tableView.mj_footer resetNoMoreData];
|
||||
[self requestNextPage];
|
||||
}
|
||||
|
||||
@@ -55,25 +55,41 @@
|
||||
if (self.isLoading) return;
|
||||
self.isLoading = YES;
|
||||
|
||||
NSLog(@"[EPMomentListView] 请求页码: %ld", (long)self.currentPage);
|
||||
@kWeakify(self);
|
||||
[self.api fetchMomentsWithType:self.sourceType page:self.currentPage pageSize:20 completion:^(NSArray <MomentsInfoModel *>* _Nullable list, NSInteger code, NSString * _Nullable msg) {
|
||||
[self.api fetchLatestMomentsWithNextID:self.nextID
|
||||
completion:^(NSArray<MomentsInfoModel *> * _Nullable list, NSString * _Nonnull nextMomentID) {
|
||||
@kStrongify(self);
|
||||
self.isLoading = NO;
|
||||
[self.refreshControl endRefreshing];
|
||||
NSLog(@"[EPMomentListView] 返回 code=%ld, count=%lu", (long)code, (unsigned long)list.count);
|
||||
if (code == 200 && list.count > 0) {
|
||||
[self endLoading];
|
||||
if (list.count > 0) {
|
||||
self.nextID = nextMomentID;
|
||||
[self.mutableRawList addObjectsFromArray:list];
|
||||
self.currentPage++;
|
||||
[self.tableView reloadData];
|
||||
} else if (code == 200 && list.count == 0 && self.currentPage == 0) {
|
||||
// 如果第一页就为空,尝试从1开始(兼容某些后端从1计数)
|
||||
self.currentPage = 1;
|
||||
[self requestNextPage];
|
||||
if (nextMomentID.length > 0) {
|
||||
[self.tableView.mj_footer endRefreshing];
|
||||
} else {
|
||||
[self.tableView.mj_footer endRefreshingWithNoMoreData];
|
||||
}
|
||||
} else {
|
||||
// TODO: 后续补充空数据页面
|
||||
if (self.nextID.length == 0) {
|
||||
[self.tableView.mj_footer endRefreshingWithNoMoreData];
|
||||
} else {
|
||||
[self.tableView.mj_footer endRefreshing];
|
||||
}
|
||||
}
|
||||
} failure:^(NSInteger code, NSString * _Nullable msg) {
|
||||
@kStrongify(self);
|
||||
[self endLoading];
|
||||
// TODO: 完全没有数据情况下,后续补充数据异常页面
|
||||
[self.tableView.mj_footer endRefreshing];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)endLoading {
|
||||
self.isLoading = NO;
|
||||
[self.refreshControl endRefreshing];
|
||||
}
|
||||
|
||||
#pragma mark - UITableView
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
@@ -123,9 +139,24 @@
|
||||
_tableView.estimatedRowHeight = 200;
|
||||
_tableView.rowHeight = UITableViewAutomaticDimension;
|
||||
_tableView.showsVerticalScrollIndicator = NO;
|
||||
_tableView.contentInset = UIEdgeInsetsMake(10, 0, 10, 0);
|
||||
// 底部留出更高空间,避免被悬浮 TabBar 遮挡
|
||||
_tableView.contentInset = UIEdgeInsetsMake(10, 0, 120, 0);
|
||||
_tableView.scrollIndicatorInsets = UIEdgeInsetsMake(10, 0, 120, 0);
|
||||
[_tableView registerClass:[EPMomentCell class] forCellReuseIdentifier:@"NewMomentCell"];
|
||||
_tableView.refreshControl = self.refreshControl;
|
||||
|
||||
// MJRefresh Footer - 加载更多
|
||||
__weak typeof(self) weakSelf = self;
|
||||
_tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
|
||||
__strong typeof(weakSelf) self = weakSelf;
|
||||
if (!self.isLoading && self.nextID.length > 0) {
|
||||
[self requestNextPage];
|
||||
} else if (self.nextID.length == 0) {
|
||||
[self.tableView.mj_footer endRefreshingWithNoMoreData];
|
||||
} else {
|
||||
[self.tableView.mj_footer endRefreshing];
|
||||
}
|
||||
}];
|
||||
}
|
||||
return _tableView;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user