更新事件中心模块,新增 HomeBannerInfoModel 相关功能,优化事件列表数据处理,调整时间选择器逻辑,修复部分 UI 问题,更新本地化字符串。版本号更新至20.20.64。

This commit is contained in:
edwinQQQ
2025-05-22 11:50:53 +08:00
parent 298a7e80c4
commit 0d01b1e6e9
9 changed files with 157 additions and 39 deletions

View File

@@ -10,6 +10,7 @@
"autoreleasepool",
"Autoresizing",
"Bugly",
"Commont",
"MSRTL",
"NIMSDK",
"Nonnull",

View File

@@ -10,7 +10,7 @@
#import "EventRoomModel.h"
#import "EventConfigModel.h"
#import "WalletInfoModel.h"
#import "HomeBannerInfoModel.h"
NS_ASSUME_NONNULL_BEGIN
@protocol CreateEventPresenterProcotol <NSObject>
@@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)deleteEventSuccess:(NSInteger)eventId;
- (void)deleteEventFailure:(NSString *)msg;
- (void)officialEventListSuccess:(EventRoomListModel *)listModel;
- (void)officialEventListSuccess:(NSArray <HomeBannerInfoModel *> *)listModel;
- (void)officialEventListFailure:(NSString *)msg;

View File

@@ -30,10 +30,9 @@
}
- (void)loadOfficialEvents {
// TODO: / bug
[Api homeBanner:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
if ([[self getView] respondsToSelector:@selector(officialEventListSuccess:)]) {
[[self getView] officialEventListSuccess:[EventConfigModel modelWithJSON:data.data]];
[[self getView] officialEventListSuccess:[HomeBannerInfoModel modelsWithArray:data.data]];
}
} fail:^(NSInteger code, NSString * _Nullable msg) {
if ([[self getView] respondsToSelector:@selector(officialEventListFailure:)]) {

View File

@@ -12,6 +12,7 @@
@property (nonatomic, strong) NSDate *selectedDate;
// StartTime
@property (nonatomic, strong) NSArray<NSDictionary *> *durationsOptions;
@property (nonatomic, strong) NSDate *defaultSelectedDate;
@end
@implementation CreateEventPickerContainerView {
@@ -187,7 +188,6 @@
NSMutableArray *months = [NSMutableArray array];
NSMutableArray *days = [NSMutableArray array];
NSMutableArray *hours = [NSMutableArray array];
NSDate *iter = start;
while ([iter compare:end] != NSOrderedDescending) {
@@ -195,21 +195,64 @@
NSString *monthStr = [NSString stringWithFormat:@"%02ld", (long)c.month];
NSString *dayStr = [NSString stringWithFormat:@"%02ld", (long)c.day];
NSString *hourStr = [NSString stringWithFormat:@"%02ld:00", (long)c.hour];
if (![months containsObject:monthStr]) [months addObject:monthStr];
if (![days containsObject:dayStr]) [days addObject:dayStr];
if (![hours containsObject:hourStr]) [hours addObject:hourStr];
iter = [calendar dateByAddingUnit:NSCalendarUnitHour value:1 toDate:iter options:0];
iter = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:iter options:0];
}
self.monthArray = months;
self.dayArray = days;
self.hourArray = hours;
//
NSDateComponents *startComp = [calendar components:NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:start];
NSInteger initialMonthIndex = [months indexOfObject:[NSString stringWithFormat:@"%02ld", (long)startComp.month]];
NSInteger initialDayIndex = [days indexOfObject:[NSString stringWithFormat:@"%02ld", (long)startComp.day]];
//
[self updateHourArrayForDate:start];
//
dispatch_async(dispatch_get_main_queue(), ^{
[self.pickerView selectRow:initialMonthIndex inComponent:0 animated:NO];
[self.pickerView selectRow:initialDayIndex inComponent:1 animated:NO];
[self.pickerView selectRow:0 inComponent:2 animated:NO];
});
self.selectedDate = start;
}
- (void)updateHourArrayForDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
//
NSDateComponents *dateComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date];
NSDateComponents *tomorrowComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:[calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:now options:0]];
BOOL isTomorrow = dateComp.year == tomorrowComp.year &&
dateComp.month == tomorrowComp.month &&
dateComp.day == tomorrowComp.day;
NSMutableArray *hours = [NSMutableArray array];
if (isTomorrow) {
//
NSInteger currentHour = [[calendar components:NSCalendarUnitHour fromDate:now] hour];
for (NSInteger i = currentHour; i <= 23; i++) {
[hours addObject:[NSString stringWithFormat:@"%02ld:00", (long)i]];
}
} else {
//
for (NSInteger i = 0; i <= 23; i++) {
[hours addObject:[NSString stringWithFormat:@"%02ld:00", (long)i]];
}
}
self.hourArray = hours;
}
- (void)showInView:(UIView *)parentView
initialDate:(NSDate *)date
config:(EventConfigModel *)config
@@ -223,6 +266,28 @@
if (type == CreateEventPickerTypeStartTime) {
[self buildStartTimeSourceWithInitialDate:date];
_titleLabel.text = YMLocalizedString(@"20.20.59_text_15");
//
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger monthIdx = [self.pickerView selectedRowInComponent:0];
NSInteger dayIdx = [self.pickerView selectedRowInComponent:1];
NSInteger hourIdx = [self.pickerView selectedRowInComponent:2];
NSDateComponents *nowComp = [calendar components:NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger year = nowComp.year;
NSInteger month = [self.monthArray[monthIdx] integerValue];
NSInteger day = [self.dayArray[dayIdx] integerValue];
NSInteger hour = [[self.hourArray[hourIdx] substringToIndex:2] integerValue];
NSDateComponents *selComp = [[NSDateComponents alloc] init];
selComp.year = year;
selComp.month = month;
selComp.day = day;
selComp.hour = hour;
selComp.minute = 0;
self.defaultSelectedDate = [calendar dateFromComponents:selComp];
self.selectedDate = self.defaultSelectedDate;
} else if (type == CreateEventPickerTypeDuration) {
[self buildDurationDataSource];
_titleLabel.text = YMLocalizedString(@"20.20.59_text_16");
@@ -270,19 +335,34 @@
case CreateEventPickerTypeStartTime: {
NSInteger monthIdx = [pickerView selectedRowInComponent:0];
NSInteger dayIdx = [pickerView selectedRowInComponent:1];
NSInteger hourIdx = [pickerView selectedRowInComponent:2];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *nowComp = [calendar components:NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger year = nowComp.year;
NSInteger month = [self.monthArray[monthIdx] integerValue];
NSInteger day = [self.dayArray[dayIdx] integerValue];
NSInteger hour = [[self.hourArray[hourIdx] substringToIndex:2] integerValue];
//
NSDateComponents *selComp = [[NSDateComponents alloc] init];
selComp.year = year;
selComp.month = month;
selComp.day = day;
selComp.hour = hour;
selComp.hour = 0;
selComp.minute = 0;
NSDate *selectedDate = [calendar dateFromComponents:selComp];
//
if (component < 2) { //
[self updateHourArrayForDate:selectedDate];
[pickerView reloadComponent:2];
[pickerView selectRow:0 inComponent:2 animated:YES];
}
//
NSInteger hourIdx = [pickerView selectedRowInComponent:2];
NSInteger hour = [[self.hourArray[hourIdx] substringToIndex:2] integerValue];
selComp.hour = hour;
self.selectedDate = [calendar dateFromComponents:selComp];
}
break;
@@ -346,19 +426,23 @@
case CreateEventPickerTypeStartTime: {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
resultString = [formatter stringFromDate:self.selectedDate];
// 使
NSDate *dateToUse = self.selectedDate ?: self.defaultSelectedDate;
resultString = [formatter stringFromDate:dateToUse];
self.onConfirmDate(dateToUse, resultString, durationMinutes);
}
break;
case CreateEventPickerTypeDuration: {
NSInteger selectedRow = [self.pickerView selectedRowInComponent:0];
resultString = self.durationsOptions[selectedRow][@"title"];
durationMinutes = [self.durationsOptions[selectedRow][@"minutes"] integerValue];
self.onConfirmDate(self.selectedDate, resultString, durationMinutes);
}
break;
default:
break;
}
self.onConfirmDate(self.selectedDate, resultString, durationMinutes);
}
[self dismiss];
}

View File

@@ -180,7 +180,10 @@ static const CGFloat kSectionSpacing = 20.0;
- (void)createEventSuccess {
[XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"20.20.59_text_34")];
[self.navigationController popViewControllerAnimated:NO];
[self.navigationController popViewControllerAnimated:YES];
if (self.createSuccess) {
self.createSuccess();
}
}
- (void)createEventFailure:(NSString *)msg {

View File

@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface EventCenterViewController : MvpViewController
@property (nonatomic,copy) NSArray<HomeBannerInfoModel *> *officialEventModels;
@end

View File

@@ -32,6 +32,7 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
@interface EventCenterViewController () <UIPageViewControllerDataSource, UIPageViewControllerDelegate, UITableViewDelegate, UITableViewDataSource, CreateEventPresenterProcotol>
@property (nonatomic, strong) NSMutableArray <HomeBannerInfoModel *>*officialDatasource;
@property (nonatomic, strong) NSMutableArray <EventItemModel *>*eventSquareDatasource;
@property (nonatomic, strong) NSMutableArray *myCreateEventDatasource;
@@ -72,7 +73,8 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
[self setupBottomButton];
// createButton
self.createButton.hidden = (self.currentIndex == 0);
self.createButton.hidden = YES;
[self.presenter loadOfficialEvents];
}
#pragma mark - Setup UI
@@ -177,8 +179,8 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
}
#pragma mark - Setup Data
- (void)setOfficialEventModels:(NSArray<HomeBannerInfoModel *> *)officialEventModels {
_officialDatasource = officialEventModels.mutableCopy;
- (void)setOfficialDatasource:(NSMutableArray<HomeBannerInfoModel *> *)officialDatasource {
_officialDatasource = officialDatasource;
//#if DEBUG
//#else
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"activityShow == %@", @(1)];
@@ -187,7 +189,7 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
//
if (_officialDatasource.count == 0) {
self.officialTableView.mj_header.hidden = YES;
self.officialTableView.mj_header.hidden = NO;
self.officialTableView.mj_footer.hidden = YES;
} else {
self.officialTableView.mj_header.hidden = NO;
@@ -205,7 +207,7 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
- (void)switchToIndex:(NSInteger)index animated:(BOOL)animated {
if (index == self.currentIndex) return;
//
self.tabButtons[self.currentIndex].selected = NO;
self.tabButtons[index].selected = YES;
@@ -238,10 +240,25 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
self.createButton.hidden = (index == 0);
//
if (index == 1 && self.eventSquareDatasource.count == 0) {
[self.presenter loadEventSquare:self.eventSquareTableViewPage];
} else if (index == 2 && self.myCreateEventDatasource.count == 0 && self.mySubEventDatasource.count == 0) {
[self.presenter loadMyEvents];
switch (index) {
case 0:
if (self.officialDatasource.count == 0) {
[self.presenter loadOfficialEvents];
}
break;
case 1:
if (self.eventSquareDatasource.count == 0) {
[self.presenter loadEventSquare:self.eventSquareTableViewPage];
}
break;
case 2:
if (self.myCreateEventDatasource.count == 0 && self.mySubEventDatasource.count == 0) {
[self.presenter loadMyEvents];
}
break;
default:
break;
}
}
@@ -252,17 +269,9 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
@kWeakify(self);
[createEventVC setCreateSuccess:^{
@kStrongify(self);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
switch (self.currentIndex) {
case 1:
[self.eventSquareTableView.mj_header beginRefreshing];
break;
case 2:
[self.myEventTableView.mj_header beginRefreshing];
break;
default:
break;
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.eventSquareTableView.mj_header beginRefreshing];
[self.myEventTableView.mj_header beginRefreshing];
});
}];
}
@@ -367,8 +376,11 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
@kWeakify(self);
if (tableView == self.officialTableView) {
if (self.officialDatasource.count == 0) {
// EventCenterEmptyCell *cell =
return [EventCenterEmptyCell cellFor:tableView customID:kOfficialEmptyID atIndexPath:indexPath];
EventCenterEmptyCell *cell = [EventCenterEmptyCell cellFor:tableView customID:kOfficialEmptyID atIndexPath:indexPath];
//
// [cell updateWithTitle:YMLocalizedString(@"20.20.59_text_37")
// subTitle:msg];
return cell;
}
EventCenterOfficialCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
@@ -553,6 +565,17 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
#pragma mark - CreateEventPresenterProcotol
- (void)officialEventListSuccess:(NSArray <HomeBannerInfoModel *> *)listModels {
[self setOfficialDatasource:listModels.mutableCopy];
[self.officialTableView.mj_header endRefreshing];
}
- (void)officialEventListFailure:(NSString *)msg {
[self.officialTableView.mj_header endRefreshing];
//
[self setOfficialDatasource:[NSMutableArray array]];
}
- (void)eventSquareListSuccess:(NSArray <EventItemModel *>*)list {
if (self.eventSquareTableViewPage == 1) {
[self.eventSquareDatasource removeAllObjects];
@@ -638,6 +661,7 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
}
}
[self.eventSquareTableView reloadData];
[self.myEventTableView.mj_header beginRefreshing];
break;
case 2:
for (EventItemModel *m in self.mySubEventDatasource) {
@@ -655,6 +679,7 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
}
}
[self.myEventTableView reloadData];
[self.eventSquareTableView.mj_header beginRefreshing];
break;
default:
@@ -702,6 +727,12 @@ static UIEdgeInsets kOfficialTableViewContentInset(void) {
_officialTableView.contentInset = kOfficialTableViewContentInset();
_officialTableView.scrollIndicatorInsets = kOfficialTableViewContentInset();
[EventCenterEmptyCell registerTo:_officialTableView withCustomID:kOfficialEmptyID];
//
__weak typeof(self) weakSelf = self;
_officialTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf.presenter loadOfficialEvents];
}];
}
return _officialTableView;
}

View File

@@ -797,7 +797,6 @@ XPHomeRecommendOtherRoomViewDelegate>
case 1: {
EventCenterViewController *vc = [[EventCenterViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
vc.officialEventModels = self.headView.bannerList;
}
break;
default:

View File

@@ -17,3 +17,4 @@ int main(int argc, char * argv[]) {
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}