diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index 67d3afa7..d55f3315 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -522,6 +522,9 @@ 4C7989EF2D195277006AE07B /* RoomModeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7989EE2D195277006AE07B /* RoomModeViewController.m */; }; 4C7989F32D1952DA006AE07B /* RoomModePresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7989F22D1952DA006AE07B /* RoomModePresenter.m */; }; 4C815A172CFEB758002A46A6 /* SuperBlockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C815A162CFEB758002A46A6 /* SuperBlockViewController.m */; }; + 4C85DB7E2DCDD70400FD9839 /* CreateEventViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C85DB7D2DCDD70400FD9839 /* CreateEventViewController.m */; }; + 4C85DB812DCDD83E00FD9839 /* CreateEventPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C85DB802DCDD83E00FD9839 /* CreateEventPresenter.m */; }; + 4C85DB842DCDDD6800FD9839 /* CreateEventViewControllerV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C85DB832DCDDD6800FD9839 /* CreateEventViewControllerV2.m */; }; 4C864A022D55F4F600191AE0 /* LuckyPackagePresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C864A012D55F4F600191AE0 /* LuckyPackagePresenter.m */; }; 4C864A052D561E1D00191AE0 /* LuckyPackageLogicManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C864A042D561E1D00191AE0 /* LuckyPackageLogicManager.m */; }; 4CA532B42D5AEE9400B8F59F /* Api+LuckyPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA532B32D5AEE9400B8F59F /* Api+LuckyPackage.m */; }; @@ -2684,6 +2687,12 @@ 4C7989F22D1952DA006AE07B /* RoomModePresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomModePresenter.m; sourceTree = ""; }; 4C815A152CFEB758002A46A6 /* SuperBlockViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SuperBlockViewController.h; sourceTree = ""; }; 4C815A162CFEB758002A46A6 /* SuperBlockViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SuperBlockViewController.m; sourceTree = ""; }; + 4C85DB7C2DCDD70400FD9839 /* CreateEventViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventViewController.h; sourceTree = ""; }; + 4C85DB7D2DCDD70400FD9839 /* CreateEventViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventViewController.m; sourceTree = ""; }; + 4C85DB7F2DCDD83E00FD9839 /* CreateEventPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventPresenter.h; sourceTree = ""; }; + 4C85DB802DCDD83E00FD9839 /* CreateEventPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventPresenter.m; sourceTree = ""; }; + 4C85DB822DCDDD6800FD9839 /* CreateEventViewControllerV2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventViewControllerV2.h; sourceTree = ""; }; + 4C85DB832DCDDD6800FD9839 /* CreateEventViewControllerV2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventViewControllerV2.m; sourceTree = ""; }; 4C864A002D55F4F600191AE0 /* LuckyPackagePresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LuckyPackagePresenter.h; sourceTree = ""; }; 4C864A012D55F4F600191AE0 /* LuckyPackagePresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LuckyPackagePresenter.m; sourceTree = ""; }; 4C864A032D561E1D00191AE0 /* LuckyPackageLogicManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LuckyPackageLogicManager.h; sourceTree = ""; }; @@ -10022,6 +10031,8 @@ E87E62512A3F55AB002F68C9 /* Presenter */ = { isa = PBXGroup; children = ( + 4C85DB7F2DCDD83E00FD9839 /* CreateEventPresenter.h */, + 4C85DB802DCDD83E00FD9839 /* CreateEventPresenter.m */, E87DF4E62A42CB00009C1185 /* XPHomePresenter.h */, E87DF4E52A42CAFF009C1185 /* XPHomePresenter.m */, E87E62672A3F571D002F68C9 /* XPHomeContainerPresenter.h */, @@ -10058,6 +10069,10 @@ 541DD9542C1EDEFB00B616C4 /* XPHomePagingViewController.m */, 4CBDC4222DC0B078005A75B9 /* EventCenterViewController.h */, 4CBDC4232DC0B078005A75B9 /* EventCenterViewController.m */, + 4C85DB7C2DCDD70400FD9839 /* CreateEventViewController.h */, + 4C85DB7D2DCDD70400FD9839 /* CreateEventViewController.m */, + 4C85DB822DCDDD6800FD9839 /* CreateEventViewControllerV2.h */, + 4C85DB832DCDDD6800FD9839 /* CreateEventViewControllerV2.m */, ); path = View; sourceTree = ""; @@ -12898,6 +12913,7 @@ E85E7BB92A4ED89F00B6D00A /* XPIncomeRecordGoldDetailsHeadView.m in Sources */, E84A2EAB2A528A4100D6AF8A /* XPIncomeRecordGoldDetailsPickViewView.m in Sources */, E82107812987D7F300DE7040 /* MessageMonentsModel.m in Sources */, + 4C85DB7E2DCDD70400FD9839 /* CreateEventViewController.m in Sources */, E81366E726F0A49E0076364C /* NSString+Utils.m in Sources */, 23194DD22AD14BF000649F51 /* DDFileLogger.m in Sources */, E8EEB90126FC31B6007C6EBA /* XPMineUserInfoPresenter.m in Sources */, @@ -13062,6 +13078,7 @@ 181D7F212727D9DB00B7C059 /* SocialStageView.m in Sources */, E8AB630D28ADD8C60023B0D2 /* XPMomentTopicContainerViewController.m in Sources */, 23E9EA7C2A83977400B792F2 /* MessageContentTreasureFairyView.m in Sources */, + 4C85DB812DCDD83E00FD9839 /* CreateEventPresenter.m in Sources */, E8D4DE472940473500EC788D /* GiftTwelveStarFirstModel.m in Sources */, 547B30F92CB511700041E962 /* RoomBoomEntryView.m in Sources */, E87DF4FB2A42CCDE009C1185 /* XPHomeRedommendCollectionViewCell.m in Sources */, @@ -13226,6 +13243,7 @@ 239D0FA92BFCB88D002977CE /* XPRoomDatingVipUpMicView.m in Sources */, E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */, E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */, + 4C85DB842DCDDD6800FD9839 /* CreateEventViewControllerV2.m in Sources */, 18EE3FDF2750C1F700A452BF /* SessionListCell.m in Sources */, 9BD798B72926362F003E03E6 /* XPSessionListHeadItem.m in Sources */, E80487652717DDD9008595F2 /* XPRoomMenuItem.m in Sources */, diff --git a/YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/Contents.json b/YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/Contents.json new file mode 100644 index 00000000..14bec9c5 --- /dev/null +++ b/YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "切图 25@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/切图 25@3x.png b/YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/切图 25@3x.png new file mode 100644 index 00000000..dc61340c Binary files /dev/null and b/YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/切图 25@3x.png differ diff --git a/YuMi/Assets.xcassets/20.20.59/event_camear.imageset/Contents.json b/YuMi/Assets.xcassets/20.20.59/event_camear.imageset/Contents.json new file mode 100644 index 00000000..5c888194 --- /dev/null +++ b/YuMi/Assets.xcassets/20.20.59/event_camear.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "组 7158@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/20.20.59/event_camear.imageset/组 7158@3x.png b/YuMi/Assets.xcassets/20.20.59/event_camear.imageset/组 7158@3x.png new file mode 100644 index 00000000..2fc3cbce Binary files /dev/null and b/YuMi/Assets.xcassets/20.20.59/event_camear.imageset/组 7158@3x.png differ diff --git a/YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/Contents.json b/YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/Contents.json new file mode 100644 index 00000000..b072bb68 --- /dev/null +++ b/YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "勾选@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/勾选@3x.png b/YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/勾选@3x.png new file mode 100644 index 00000000..d3e1414f Binary files /dev/null and b/YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/勾选@3x.png differ diff --git a/YuMi/Assets.xcassets/20.20.59/event_selected.imageset/Contents.json b/YuMi/Assets.xcassets/20.20.59/event_selected.imageset/Contents.json new file mode 100644 index 00000000..44ba855a --- /dev/null +++ b/YuMi/Assets.xcassets/20.20.59/event_selected.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "勾选@3x (1).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/20.20.59/event_selected.imageset/勾选@3x (1).png b/YuMi/Assets.xcassets/20.20.59/event_selected.imageset/勾选@3x (1).png new file mode 100644 index 00000000..c4fd90ef Binary files /dev/null and b/YuMi/Assets.xcassets/20.20.59/event_selected.imageset/勾选@3x (1).png differ diff --git a/YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/Contents.json b/YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/Contents.json new file mode 100644 index 00000000..36cc3b97 --- /dev/null +++ b/YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "组 8424@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/组 8424@3x.png b/YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/组 8424@3x.png new file mode 100644 index 00000000..2491f946 Binary files /dev/null and b/YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/组 8424@3x.png differ diff --git a/YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.h b/YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.h new file mode 100644 index 00000000..7355ce5f --- /dev/null +++ b/YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.h @@ -0,0 +1,25 @@ +// +// CreateEventPresenter.h +// YuMi +// +// Created by P on 2025/5/9. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CreateEventPresenter : BaseMvpPresenter + +- (void)createEventWithTitle:(NSString *)title + image:(UIImage *)image + uploadToHome:(BOOL)uploadToHome + roomId:(NSString *)roomId + startTime:(NSDate *)startTime + duration:(NSInteger)duration + content:(NSString *)content + notifyFans:(BOOL)notifyFans; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.m b/YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.m new file mode 100644 index 00000000..ccb5ceb6 --- /dev/null +++ b/YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.m @@ -0,0 +1,74 @@ +// +// CreateEventPresenter.m +// YuMi +// +// Created by P on 2025/5/9. +// + +#import "CreateEventPresenter.h" +#import "CreateEventViewController.h" + +@interface CreateEventPresenter() + +@property (nonatomic, weak) CreateEventViewController *view; + +@end + +@implementation CreateEventPresenter + +//- (void)attachView:(id)view { +// [super attachView:view]; +// self.view = view; +//} + +- (void)createEventWithTitle:(NSString *)title + image:(UIImage *)image + uploadToHome:(BOOL)uploadToHome + roomId:(NSString *)roomId + startTime:(NSDate *)startTime + duration:(NSInteger)duration + content:(NSString *)content + notifyFans:(BOOL)notifyFans { + // 输入验证 + if (title.length == 0) { + [self.view showError:@"请输入活动标题"]; + return; + } + + if (!image) { + [self.view showError:@"请选择活动横幅图片"]; + return; + } + + if (roomId.length == 0) { + [self.view showError:@"请选择房间"]; + return; + } + + if (!startTime) { + [self.view showError:@"请选择开始时间"]; + return; + } + + if (duration <= 0) { + [self.view showError:@"请选择活动时长"]; + return; + } + + if (content.length == 0) { + [self.view showError:@"请输入活动内容"]; + return; + } + + // TODO: 调用网络接口创建活动 + // 1. 上传图片 + // 2. 创建活动 + // 3. 如果uploadToHome为YES,将横幅上传到主页 + + // 模拟网络请求成功 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.view showCreateSuccess]; + }); +} + +@end diff --git a/YuMi/Modules/YMNewHome/View/CreateEventViewController.h b/YuMi/Modules/YMNewHome/View/CreateEventViewController.h new file mode 100644 index 00000000..5518a5d9 --- /dev/null +++ b/YuMi/Modules/YMNewHome/View/CreateEventViewController.h @@ -0,0 +1,22 @@ +// +// CreateEventViewController.h +// YuMi +// +// Created by P on 2025/5/9. +// + +#import "MvpViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CreateEventViewController : MvpViewController + +- (void)showRoomSelectionView; +- (void)showTimeSelectionView; +- (void)showDurationSelectionView; +- (void)showCreateSuccess; +- (void)showError:(NSString *)errorMessage; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMNewHome/View/CreateEventViewController.m b/YuMi/Modules/YMNewHome/View/CreateEventViewController.m new file mode 100644 index 00000000..5f498a9b --- /dev/null +++ b/YuMi/Modules/YMNewHome/View/CreateEventViewController.m @@ -0,0 +1,253 @@ +// +// CreateEventViewController.m +// YuMi +// +// Created by P on 2025/5/9. +// + +#import "CreateEventViewController.h" +#import "CreateEventPresenter.h" +#import + +@interface CreateEventViewController () + +@property (nonatomic, strong) UIScrollView *scrollView; +@property (nonatomic, strong) UIView *contentView; +@property (nonatomic, strong) UITextField *titleTextField; +@property (nonatomic, strong) UIImageView *bannerImageView; +@property (nonatomic, strong) UISwitch *uploadSwitch; +@property (nonatomic, strong) UIButton *roomSelectButton; +@property (nonatomic, strong) UIButton *startTimeButton; +@property (nonatomic, strong) UIButton *durationButton; +@property (nonatomic, strong) UITextView *contentTextView; +@property (nonatomic, strong) UISwitch *notifyFansSwitch; +@property (nonatomic, strong) UIButton *createButton; + +@end + +@implementation CreateEventViewController + +- (__kindof id)presenter { + return [[CreateEventPresenter alloc] init]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + self.title = @"创建活动"; + + [self setupUI]; +} + +#pragma mark - UI Setup + +- (void)setupUI { + // 添加scrollView + self.scrollView = [[UIScrollView alloc] init]; + [self.view addSubview:self.scrollView]; + [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.view); + }]; + + // 添加contentView + self.contentView = [[UIView alloc] init]; + [self.scrollView addSubview:self.contentView]; + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.scrollView); + make.width.equalTo(self.scrollView); + }]; + + // 标题输入框 + self.titleTextField = [[UITextField alloc] init]; + self.titleTextField.placeholder = @"活动标题"; + self.titleTextField.font = [UIFont systemFontOfSize:16]; + [self.contentView addSubview:self.titleTextField]; + [self.titleTextField mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.contentView.mas_top).offset(20); + make.left.equalTo(self.contentView).offset(16); + make.right.equalTo(self.contentView).offset(-16); + make.height.mas_equalTo(44); + }]; + + // 横幅图片 + self.bannerImageView = [[UIImageView alloc] init]; + self.bannerImageView.backgroundColor = [UIColor lightGrayColor]; + self.bannerImageView.contentMode = UIViewContentModeScaleAspectFill; + self.bannerImageView.clipsToBounds = YES; + self.bannerImageView.userInteractionEnabled = YES; + [self.contentView addSubview:self.bannerImageView]; + [self.bannerImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.titleTextField.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + make.right.equalTo(self.contentView).offset(-16); + make.height.mas_equalTo(200); + }]; + + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectBannerImage)]; + [self.bannerImageView addGestureRecognizer:tapGesture]; + + // 上传到主页开关 + UILabel *uploadLabel = [[UILabel alloc] init]; + uploadLabel.text = @"上传横幅到主页(消耗1000)"; + uploadLabel.font = [UIFont systemFontOfSize:14]; + [self.contentView addSubview:uploadLabel]; + + self.uploadSwitch = [[UISwitch alloc] init]; + [self.contentView addSubview:self.uploadSwitch]; + + [uploadLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.bannerImageView.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + }]; + + [self.uploadSwitch mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(uploadLabel); + make.right.equalTo(self.contentView).offset(-16); + }]; + + // 选择房间按钮 + self.roomSelectButton = [UIButton buttonWithType:UIButtonTypeSystem]; + [self.roomSelectButton setTitle:@"选择房间" forState:UIControlStateNormal]; + [self.contentView addSubview:self.roomSelectButton]; + [self.roomSelectButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(uploadLabel.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + make.right.equalTo(self.contentView).offset(-16); + make.height.mas_equalTo(44); + }]; + + // 开始时间按钮 + self.startTimeButton = [UIButton buttonWithType:UIButtonTypeSystem]; + [self.startTimeButton setTitle:@"开始时间" forState:UIControlStateNormal]; + [self.contentView addSubview:self.startTimeButton]; + [self.startTimeButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.roomSelectButton.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + make.right.equalTo(self.contentView).offset(-16); + make.height.mas_equalTo(44); + }]; + + // 时长选择按钮 + self.durationButton = [UIButton buttonWithType:UIButtonTypeSystem]; + [self.durationButton setTitle:@"时长" forState:UIControlStateNormal]; + [self.contentView addSubview:self.durationButton]; + [self.durationButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.startTimeButton.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + make.right.equalTo(self.contentView).offset(-16); + make.height.mas_equalTo(44); + }]; + + // 活动内容输入框 + self.contentTextView = [[UITextView alloc] init]; + self.contentTextView.font = [UIFont systemFontOfSize:14]; + self.contentTextView.layer.borderWidth = 0.5; + self.contentTextView.layer.borderColor = [UIColor lightGrayColor].CGColor; + self.contentTextView.layer.cornerRadius = 4; + [self.contentView addSubview:self.contentTextView]; + [self.contentTextView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.durationButton.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + make.right.equalTo(self.contentView).offset(-16); + make.height.mas_equalTo(100); + }]; + + // 通知粉丝开关 + UILabel *notifyLabel = [[UILabel alloc] init]; + notifyLabel.text = @"通知我的粉丝"; + notifyLabel.font = [UIFont systemFontOfSize:14]; + [self.contentView addSubview:notifyLabel]; + + self.notifyFansSwitch = [[UISwitch alloc] init]; + [self.contentView addSubview:self.notifyFansSwitch]; + + [notifyLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.contentTextView.mas_bottom).offset(20); + make.left.equalTo(self.contentView).offset(16); + }]; + + [self.notifyFansSwitch mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(notifyLabel); + make.right.equalTo(self.contentView).offset(-16); + make.bottom.equalTo(self.contentView).offset(-80); + }]; + + // 创建按钮 + self.createButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [self.createButton setTitle:@"创建活动" forState:UIControlStateNormal]; + [self.createButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + self.createButton.backgroundColor = [UIColor systemBlueColor]; + self.createButton.layer.cornerRadius = 20; + [self.view addSubview:self.createButton]; + [self.createButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).offset(-20); + make.centerX.equalTo(self.view); + make.width.mas_equalTo(195); + make.height.mas_equalTo(40); + }]; + + [self.createButton addTarget:self action:@selector(createButtonTapped) forControlEvents:UIControlEventTouchUpInside]; +} + +#pragma mark - Actions + +- (void)selectBannerImage { + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + [self presentViewController:picker animated:YES completion:nil]; +} + +- (void)createButtonTapped { + CreateEventPresenter *presenter = (CreateEventPresenter *)self.presenter; + [presenter createEventWithTitle:self.titleTextField.text + image:self.bannerImageView.image + uploadToHome:self.uploadSwitch.isOn + roomId:self.roomSelectButton.titleLabel.text + startTime:[NSDate date] // 这里需要根据实际选择的时间设置 + duration:60 // 这里需要根据实际选择的时长设置 + content:self.contentTextView.text + notifyFans:self.notifyFansSwitch.isOn]; +} + +#pragma mark - View Protocol Methods + +- (void)showRoomSelectionView { + // TODO: 显示房间选择视图 +} + +- (void)showTimeSelectionView { + // TODO: 显示时间选择视图 +} + +- (void)showDurationSelectionView { + // TODO: 显示时长选择视图 +} + +- (void)showCreateSuccess { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"成功" message:@"活动创建成功" preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self.navigationController popViewControllerAnimated:YES]; + }]]; + [self presentViewController:alert animated:YES completion:nil]; +} + +- (void)showError:(NSString *)errorMessage { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:errorMessage preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]]; + [self presentViewController:alert animated:YES completion:nil]; +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + UIImage *selectedImage = info[UIImagePickerControllerOriginalImage]; + self.bannerImageView.image = selectedImage; + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.h b/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.h new file mode 100644 index 00000000..d4c4128a --- /dev/null +++ b/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.h @@ -0,0 +1,65 @@ +// +// CreateEventViewControllerV2.h +// YuMi +// +// Created by P on 2025/5/9. +// + +#import "MvpViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CreateEventViewControllerV2 : MvpViewController + +@property (nonatomic, strong) UIScrollView *scrollView; +@property (nonatomic, strong) UIView *contentView; + +@property (nonatomic, strong) UILabel *eventTitleLabel; +@property (nonatomic, strong) UITextField *eventTitleTextField; +@property (nonatomic, strong) UILabel *eventTitleCharCountLabel; + +@property (nonatomic, strong) UILabel *eventBannerLabel; +@property (nonatomic, strong) UIImageView *eventBannerImageView; +@property (nonatomic, strong) UIImageView *eventBannerCamearImageView; + +@property (nonatomic, strong) UILabel *uploadBannerLabel; +@property (nonatomic, strong) UIButton *uploadBannerYesButton; +@property (nonatomic, strong) UIButton *uploadBannerNoButton; + +@property (nonatomic, strong) UILabel *selectRoomLabel; +@property (nonatomic, strong) UIView *selectRoomView; +@property (nonatomic, strong) UILabel *selectRoomPlaceholderLabel; +@property (nonatomic, strong) UIImageView *selectRoomArrowImageView; + +@property (nonatomic, strong) UILabel *startTimeLabel; +@property (nonatomic, strong) UIView *startTimeView; +@property (nonatomic, strong) UILabel *startTimePlaceholderLabel; +@property (nonatomic, strong) UIImageView *startTimeArrowImageView; + +@property (nonatomic, strong) NSDate *selectedStartTime; // 新增:存储选择的开始时间 +@property (nonatomic, strong) UIView *datePickerContainerView; // 新增:日期选择器容器视图 +@property (nonatomic, strong) UIDatePicker *datePicker; // 新增:日期选择器 +@property (nonatomic, strong) UIToolbar *pickerToolbar; // 新增:选择器工具栏 + +@property (nonatomic, strong) UILabel *durationLabel; +@property (nonatomic, strong) UIView *durationView; +@property (nonatomic, strong) UILabel *durationPlaceholderLabel; +@property (nonatomic, strong) UIImageView *durationArrowImageView; + +@property (nonatomic, assign) NSInteger selectedDurationInMinutes; // 新增:存储选择的时长(分钟) +@property (nonatomic, strong) UIView *durationPickerContainerView; // 新增:时长选择器容器视图 +@property (nonatomic, strong) UIPickerView *durationPicker; // 新增:时长选择器 (UIPickerView) +@property (nonatomic, strong) UIToolbar *durationPickerToolbar; // 新增:时长选择器工具栏 + +@property (nonatomic, strong) UILabel *eventContentLabel; +@property (nonatomic, strong) UITextView *eventContentTextView; +@property (nonatomic, strong) UILabel *eventContentCharCountLabel; + +@property (nonatomic, strong) UILabel *notifyFansLabel; +@property (nonatomic, strong) UISwitch *notifyFansSwitch; + +@property (nonatomic, strong) UIButton *createEventButton; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.m b/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.m new file mode 100644 index 00000000..dc44d5fe --- /dev/null +++ b/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.m @@ -0,0 +1,709 @@ +// +// CreateEventViewControllerV2.m +// YuMi +// +// Created by P on 2025/5/9. +// + +#import "CreateEventViewControllerV2.h" + +#import +#import + +#define MAX_EVENT_TITLE_LENGTH 20 +#define MAX_EVENT_CONTENT_LENGTH 100 + +@interface CreateEventViewControllerV2 () +// 添加私有方法声明 +- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag; +- (void)setupDatePicker; // 新增:设置日期选择器 +- (void)showDatePicker; // 新增:显示日期选择器 +- (void)hideDatePicker; // 新增:隐藏日期选择器 +- (void)datePickerDoneTapped; // 新增:日期选择器确定按钮点击事件 +- (void)datePickerCancelTapped; // 新增:日期选择器取消按钮点击事件 + +// 新增:时长选择器相关方法声明 +- (void)setupDurationPicker; +- (void)showDurationPicker; +- (void)hideDurationPicker; +- (void)durationPickerDoneTapped; +- (void)durationPickerCancelTapped; +@end + +@implementation CreateEventViewControllerV2 + +static const CGFloat kHorizontalPadding = 16.0; +static const CGFloat kVerticalPadding = 10.0; +static const CGFloat kSectionSpacing = 20.0; + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + self.title = @"Create Event"; + + [self setupUI]; + [self setupDatePicker]; // 新增:调用日期选择器设置方法 +// [self setupDurationPicker]; // 新增:调用时长选择器设置方法 + [self updateEventTitleCharCount]; + [self updateEventContentCharCount]; + + self.selectedDurationInMinutes = 120; // Default to 2 hours + [self updateDurationLabel]; +} + +- (void)backButtonTapped { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)setupUI { + // ScrollView and ContentView + self.scrollView = [[UIScrollView alloc] init]; + [self.view addSubview:self.scrollView]; + + self.contentView = [[UIView alloc] init]; + [self.scrollView addSubview:self.contentView]; + + UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; + UIVisualEffectView *visualView = [[UIVisualEffectView alloc]initWithEffect:blurEffect]; +// visualView.frame = CGRectMake(0, KScreenHeight - 46, KScreenWidth, 46); + [self.view addSubview:visualView]; + + // Create Event Button (fixed at bottom) + self.createEventButton = [UIButton buttonWithType:UIButtonTypeSystem]; + [self.createEventButton setTitle:YMLocalizedString(@"20.20.59_text_8") forState:UIControlStateNormal]; + [self.createEventButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // Adjust color as needed + [self.createEventButton addGradientBackgroundWithColors:@[ + UIColorFromRGB(0xe29030), + UIColorFromRGB(0xfcc074), + ] startPoint:CGPointMake(0, 0.5) endPoint:CGPointMake(1, 0.5) cornerRadius:23]; + [self.createEventButton setCornerRadius:23]; + self.createEventButton.userInteractionEnabled = NO; + self.createEventButton.alpha = 0.3; + [self.createEventButton addTarget:self action:@selector(createEventButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:self.createEventButton]; + + [self.createEventButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(self.view).offset(20); + make.trailing.equalTo(self.view).offset(-20); + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).offset(-20); + make.height.mas_equalTo(46); + }]; + + [visualView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.view); + make.top.mas_equalTo(self.createEventButton.mas_top).offset(-20); + }]; + + [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); + make.bottom.leading.trailing.equalTo(self.view); +// make.bottom.equalTo(self.createEventButton.mas_top).offset(-10); // Space above button + }]; + + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.scrollView); + make.width.equalTo(self.scrollView); + }]; + + [self setupEventTitleSection]; + [self setupEventBannerSection]; + [self setupUploadBannerSection]; + [self setupSelectRoomSection]; + [self setupStartTimeSection]; + [self setupDurationSection]; + [self setupEventContentSection]; + [self setupNotifyMyFansSection]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; +} + +#pragma mark - Helper Methods + +- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag { + UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; + [b setImage:kImage(imageName) forState:UIControlStateNormal]; + [b setImage:kImage(selectedImageName) forState:UIControlStateSelected]; + [b setTitle:title forState:UIControlStateNormal]; + [b setTitleColor:UIColorFromRGB(0x313131) forState:UIControlStateNormal]; + [b.titleLabel setFont:kFontMedium(14)]; + b.tag = tag; + return b; +} + +- (UILabel *)createLabelWithText:(NSString *)text { + UILabel *label = [[UILabel alloc] init]; + label.text = text; + label.font = kFontMedium(14); + label.textColor = UIColorFromRGB(0x313131); + return label; +} + +- (UITextField *)createTextFieldWithPlaceholder:(NSString *)placeholder { + UITextField *textField = [[UITextField alloc] init]; + textField.placeholder = placeholder; + textField.font = kFontRegular(14); + textField.textColor = UIColorFromRGB(0x313131); + textField.borderStyle = UITextBorderStyleRoundedRect; + textField.layer.cornerRadius = 8; + textField.backgroundColor = UIColorFromRGB(0xf2f3f7); + return textField; +} + +- (UILabel *)createCharCountLabel { + UILabel *label = [[UILabel alloc] init]; + label.font = kFontRegular(12); + label.textColor = UIColorFromRGB(0x7b7b7d); + return label; +} + +- (UIView *)createSelectionViewWithPlaceholder:(NSString *)placeholder target:(id)target action:(SEL)action { + UIView *view = [[UIView alloc] init]; + view.backgroundColor = UIColorFromRGB(0xf2f3f7); + view.layer.cornerRadius = 8; + + UILabel *label = [[UILabel alloc] init]; + label.text = placeholder; + label.font = kFontRegular(14); + label.textColor = UIColorFromRGB(0x7b7b7d); + [view addSubview:label]; + + UIImageView *arrowImageView = [[UIImageView alloc] initWithImage:kImage(@"event_arrow")]; + [view addSubview:arrowImageView]; + + [label mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(view).offset(10); + make.centerY.equalTo(view); + }]; + + [arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.trailing.equalTo(view).offset(-10); + make.centerY.equalTo(view); + make.width.height.mas_equalTo(22); + }]; + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:target action:action]; + [view addGestureRecognizer:tap]; + view.userInteractionEnabled = YES; + + if ([placeholder isEqualToString:YMLocalizedString(@"XPAnchorPKTableViewCell2")]) { // Store placeholder label for later update + if (action == @selector(selectRoomTapped)) self.selectRoomPlaceholderLabel = label; + else if (action == @selector(selectStartTimeTapped)) self.startTimePlaceholderLabel = label; + else if (action == @selector(selectDurationTapped)) self.durationPlaceholderLabel = label; + } + + return view; +} + +- (void)updateEventTitleCharCount { + NSInteger currentLength = self.eventTitleTextField.text.length; + self.eventTitleCharCountLabel.text = [NSString stringWithFormat:@"%ld/%d", (long)currentLength, MAX_EVENT_TITLE_LENGTH]; +} + +- (void)updateEventContentCharCount { + NSInteger currentLength = self.eventContentTextView.text.length; + self.eventContentCharCountLabel.text = [NSString stringWithFormat:@"%ld/%d", (long)currentLength, MAX_EVENT_CONTENT_LENGTH]; +} + +#pragma mark - Actions + +- (void)eventBannerTapped { + NSLog(@"Event Banner Tapped"); + if (@available(iOS 14, *)) { + PHPickerConfiguration *config = [[PHPickerConfiguration alloc] init]; + config.filter = [PHPickerFilter imagesFilter]; + config.selectionLimit = 1; + PHPickerViewController *picker = [[PHPickerViewController alloc] initWithConfiguration:config]; + picker.delegate = self; + [self presentViewController:picker animated:YES completion:nil]; + } else { + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + [self presentViewController:picker animated:YES completion:nil]; + } +} + +- (void)selectRoomTapped { + NSLog(@"Select Room Tapped"); + // Placeholder: Show a room selection UI (e.g., UIPickerView or new VC) + // For now, just update the label + self.selectRoomPlaceholderLabel.text = @"Room A"; + self.selectRoomPlaceholderLabel.textColor = [UIColor blackColor]; +} + +- (void)selectStartTimeTapped { + NSLog(@"Select Start Time Tapped"); + // Placeholder: Show a date picker + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"yyyy-MM-dd HH:mm"; + self.startTimePlaceholderLabel.text = [formatter stringFromDate:[NSDate date]]; + self.startTimePlaceholderLabel.textColor = [UIColor blackColor]; +} + +- (void)selectDurationTapped { + NSLog(@"Select Duration Tapped"); + // Placeholder: Show a duration picker +// self.durationPlaceholderLabel.text = @"2 hours"; +// self.durationPlaceholderLabel.textColor = [UIColor blackColor]; + + self.datePickerContainerView.hidden = NO; +} + +- (void)createEventButtonTapped { + NSLog(@"Create Event Tapped"); + // Gather all data and proceed with event creation logic + NSString *title = self.eventTitleTextField.text; + UIImage *bannerImage = self.eventBannerImageView.image; + BOOL uploadToHomepage = self.uploadBannerYesButton.selected; + NSString *selectedRoom = self.selectRoomPlaceholderLabel.text; // This is a placeholder, get actual ID + NSString *startTime = self.startTimePlaceholderLabel.text; // This is a placeholder, get actual NSDate + NSString *duration = self.durationPlaceholderLabel.text; // This is a placeholder, get actual duration value + NSString *content = self.eventContentTextView.text; + BOOL notifyFans = self.notifyFansSwitch.isOn; + + // Basic Validation (can be expanded) + if (title.length == 0) { + NSLog(@"Event title is missing"); + return; + } + if (!bannerImage) { + NSLog(@"Event banner is missing"); + // return; // Allow creating event without banner for now, or enforce + } + // ... more validations + + NSLog(@"Title: %@, Upload: %d, Room: %@, Start: %@, Duration: %@, Content: %@, Notify: %d", + title, uploadToHomepage, selectedRoom, startTime, duration, content, notifyFans); + // TODO: Call presenter or service to create event +} + +#pragma mark - UITextFieldDelegate + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { + if (textField == self.eventTitleTextField) { + NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; + if (newString.length > MAX_EVENT_TITLE_LENGTH) { + return NO; + } + } + return YES; +} + +- (void)textFieldDidChangeSelection:(UITextField *)textField { + if (textField == self.eventTitleTextField) { + [self updateEventTitleCharCount]; + } +} + +#pragma mark - UITextViewDelegate + +- (void)textViewDidChange:(UITextView *)textView { + if (textView == self.eventContentTextView) { + [self updateEventContentCharCount]; + // Optional: Add placeholder behavior for UITextView if needed + } +} + +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + if (textView == self.eventContentTextView) { + NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text]; + if (newText.length > MAX_EVENT_CONTENT_LENGTH) { + return NO; + } + } + return YES; +} + +- (void)uploadBannerButtonTapped:(UIButton *)sender { + if (sender == self.uploadBannerYesButton) { + if (!self.uploadBannerYesButton.selected) { // 避免重复设置 + self.uploadBannerYesButton.selected = YES; + self.uploadBannerNoButton.selected = NO; + // 可在此处处理横幅上传状态的逻辑,例如: self.shouldUploadBanner = YES; + } + } else if (sender == self.uploadBannerNoButton) { + if (!self.uploadBannerNoButton.selected) { // 避免重复设置 + self.uploadBannerYesButton.selected = NO; + self.uploadBannerNoButton.selected = YES; + // 可在此处处理横幅上传状态的逻辑,例如: self.shouldUploadBanner = NO; + } + } +} + +#pragma mark - UIImagePickerControllerDelegate (Legacy) + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + UIImage *selectedImage = info[UIImagePickerControllerOriginalImage]; + if (selectedImage) { + self.eventBannerImageView.image = selectedImage; + self.eventBannerCamearImageView.hidden = NO; // Hide placeholder once image is selected + } + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - PHPickerViewControllerDelegate (iOS 14+) + +- (void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray *)results API_AVAILABLE(ios(14)) { + [picker dismissViewControllerAnimated:YES completion:nil]; + if (results.count == 0) { + return; + } + + PHPickerResult *result = results.firstObject; + if ([result.itemProvider canLoadObjectOfClass:[UIImage class]]) { + [result.itemProvider loadObjectOfClass:[UIImage class] completionHandler:^(__kindof id _Nullable object, NSError * _Nullable error) { + if ([object isKindOfClass:[UIImage class]]) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.eventBannerImageView.image = (UIImage *)object; + self.eventBannerCamearImageView.hidden = NO; // Hide placeholder + }); + } + }]; + } +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +#pragma mark - Date Picker Methods + +- (void)setupDatePicker { + // Container View + self.datePickerContainerView = [[UIView alloc] init]; + self.datePickerContainerView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; // Semi-transparent background + [self.view addSubview:self.datePickerContainerView]; + self.datePickerContainerView.hidden = YES; // Initially hidden + + [self.datePickerContainerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.view); + }]; + + // Picker Toolbar + self.pickerToolbar = [[UIToolbar alloc] init]; + self.pickerToolbar.barStyle = UIBarStyleDefault; + [self.pickerToolbar sizeToFit]; + + UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(datePickerCancelTapped)]; + UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(datePickerDoneTapped)]; + UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; + [self.pickerToolbar setItems:@[cancelButton, flexibleSpace, doneButton]]; + [self.datePickerContainerView addSubview:self.pickerToolbar]; + + // Date Picker + self.datePicker = [[UIDatePicker alloc] init]; + self.datePicker.datePickerMode = UIDatePickerModeDateAndTime; + if (@available(iOS 13.4, *)) { + self.datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels; + } + self.datePicker.backgroundColor = [UIColor whiteColor]; + [self.datePickerContainerView addSubview:self.datePicker]; + + self.pickerToolbar.translatesAutoresizingMaskIntoConstraints = NO; + self.datePicker.translatesAutoresizingMaskIntoConstraints = NO; + + // Constraints for Toolbar and DatePicker + [self.pickerToolbar mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.equalTo(self.datePickerContainerView); + make.bottom.equalTo(self.datePicker.mas_top); + make.height.mas_equalTo(44); + }]; + + [self.datePicker mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.datePickerContainerView); + make.height.mas_equalTo(216); + }]; +} + +- (void)showDatePicker { + [self.view bringSubviewToFront:self.datePickerContainerView]; + self.datePickerContainerView.hidden = NO; + self.datePickerContainerView.alpha = 0; + [UIView animateWithDuration:0.3 animations:^{ + self.datePickerContainerView.alpha = 1; + }]; +} + +- (void)hideDatePicker { + [UIView animateWithDuration:0.3 animations:^{ + self.datePickerContainerView.alpha = 0; + } completion:^(BOOL finished) { + self.datePickerContainerView.hidden = YES; + }]; +} + +- (void)datePickerDoneTapped { + self.selectedStartTime = self.datePicker.date; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; // Customize format as needed + NSString *formattedDate = [dateFormatter stringFromDate:self.selectedStartTime]; + + self.startTimePlaceholderLabel.text = formattedDate; + // If you have a placeholder color, change it back to normal text color + // self.startTimePlaceholderLabel.textColor = [UIColor blackColor]; + + [self hideDatePicker]; +} + +- (void)datePickerCancelTapped { + [self hideDatePicker]; +} + +- (void)updateDurationLabel { + NSInteger hours = self.selectedDurationInMinutes / 60; + NSInteger minutes = self.selectedDurationInMinutes % 60; + NSString *durationString; + if (hours > 0 && minutes > 0) { + durationString = [NSString stringWithFormat:@"%ldh %ldm", (long)hours, (long)minutes]; + } else if (hours > 0) { + durationString = [NSString stringWithFormat:@"%ldh", (long)hours]; + } else if (minutes > 0) { + durationString = [NSString stringWithFormat:@"%ldm", (long)minutes]; + } else { + durationString = @"Select"; // Or some default placeholder + } + UILabel *label = (UILabel *)[self.durationView viewWithTag:100]; + if (label) { + label.text = durationString; + } +} + +#pragma mark - UIPickerViewDataSource + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { + if (pickerView == self.durationPicker) { + return 2; // Hours and Minutes + } + return 0; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { + if (pickerView == self.durationPicker) { + if (component == 0) { // Hours component + return 24; // 1 to 24 hours + } else if (component == 1) { // Minutes component + return 12; // 0, 5, 10, ..., 55 minutes (12 options) + } + } + return 0; +} + +#pragma mark - UIPickerViewDelegate + +- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { + if (pickerView == self.durationPicker) { + if (component == 0) { // Hours component + return [NSString stringWithFormat:@"%ld h", (long)row + 1]; + } else if (component == 1) { // Minutes component + return [NSString stringWithFormat:@"%02ld m", (long)row * 5]; + } + } + return nil; +} + +#pragma mark - Event Title Section +- (void)setupEventTitleSection { + self.eventTitleLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_9")]; + [self.contentView addSubview:self.eventTitleLabel]; + self.eventTitleTextField = [self createTextFieldWithPlaceholder:@""]; + self.eventTitleTextField.delegate = self; + [self.contentView addSubview:self.eventTitleTextField]; + self.eventTitleCharCountLabel = [self createCharCountLabel]; + [self.contentView addSubview:self.eventTitleCharCountLabel]; + + [self.eventTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.contentView.mas_top).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + + [self.eventTitleTextField mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.eventTitleLabel.mas_bottom).offset(kVerticalPadding); + make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding); + make.height.mas_equalTo(40); + }]; + + [self.eventTitleCharCountLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY + .equalTo(self.eventTitleLabel); + make.trailing.equalTo(self.eventTitleTextField); + }]; +} + +#pragma mark - Event Banner Section +- (void)setupEventBannerSection { + self.eventBannerLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_10")]; + [self.contentView addSubview:self.eventBannerLabel]; + + self.eventBannerImageView = [[UIImageView alloc] initWithImage:kImage(@"event_take_photo")]; + self.eventBannerImageView.contentMode = UIViewContentModeScaleAspectFill; + self.eventBannerImageView.clipsToBounds = YES; + self.eventBannerImageView.layer.cornerRadius = 8; + self.eventBannerImageView.userInteractionEnabled = YES; + UITapGestureRecognizer *bannerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(eventBannerTapped)]; + [self.eventBannerImageView addGestureRecognizer:bannerTap]; + [self.contentView addSubview:self.eventBannerImageView]; + + self.eventBannerCamearImageView = [[UIImageView alloc] initWithImage:kImage(@"event_camear")]; + self.eventBannerCamearImageView.hidden = YES; + [self.eventBannerImageView addSubview:self.eventBannerCamearImageView]; + + [self.eventBannerLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.eventTitleTextField.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + + [self.eventBannerImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.eventBannerLabel.mas_bottom).offset(kVerticalPadding); + make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding); + make.height.mas_equalTo(118); // Adjust height as needed + }]; + [self.eventBannerCamearImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.trailing.equalTo(self.eventBannerImageView); + make.width.height.mas_equalTo(32); + }]; +} + +#pragma mark - Upload Banner Section +- (void)setupUploadBannerSection { + self.uploadBannerLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_11")]; + [self.contentView addSubview:self.uploadBannerLabel]; + self.uploadBannerYesButton = [self createUploadBannerButtonWithTitle:YMLocalizedString(@"20.20.59_text_12") imageName:@"event_non_select" selectedImageName:@"event_selected" tag:0]; + self.uploadBannerYesButton.selected = YES; + [self.uploadBannerYesButton addTarget:self action:@selector(uploadBannerButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:self.uploadBannerYesButton]; + self.uploadBannerNoButton = [self createUploadBannerButtonWithTitle:YMLocalizedString(@"20.20.59_text_13") imageName:@"event_non_select" selectedImageName:@"event_selected" tag:1]; + self.uploadBannerNoButton.selected = NO; + [self.uploadBannerNoButton addTarget:self action:@selector(uploadBannerButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:self.uploadBannerNoButton]; + + [self.uploadBannerLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.eventBannerImageView.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + [self.uploadBannerYesButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.uploadBannerLabel.mas_bottom).offset(kVerticalPadding); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + make.height.mas_equalTo(20); + }]; + [self.uploadBannerNoButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.uploadBannerLabel.mas_bottom).offset(kVerticalPadding); + make.leading.equalTo(self.uploadBannerYesButton.mas_trailing).offset(70); + make.trailing.lessThanOrEqualTo(self.contentView).offset(-16); + make.height.height.equalTo(self.uploadBannerYesButton); + }]; +} + +#pragma mark - Select Room Section +- (void)setupSelectRoomSection { + self.selectRoomLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_14")]; + [self.contentView addSubview:self.selectRoomLabel]; + self.selectRoomView = [self createSelectionViewWithPlaceholder:YMLocalizedString(@"XPAnchorPKTableViewCell2") target:self action:@selector(selectRoomTapped)]; + [self.contentView addSubview:self.selectRoomView]; + [self.selectRoomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.uploadBannerYesButton.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + [self.selectRoomView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.selectRoomLabel.mas_bottom).offset(kVerticalPadding); + make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding); + make.height.mas_equalTo(44); + }]; +} + +#pragma mark - Start Time Section +- (void)setupStartTimeSection { + self.startTimeLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_15")]; + [self.contentView addSubview:self.startTimeLabel]; + self.startTimeView = [self createSelectionViewWithPlaceholder:YMLocalizedString(@"XPAnchorPKTableViewCell2") + target:self + action:@selector(selectStartTimeTapped)]; + [self.contentView addSubview:self.startTimeView]; + [self.startTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.selectRoomView.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + [self.startTimeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.startTimeLabel.mas_bottom).offset(kVerticalPadding); + make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding); + make.height.mas_equalTo(40); + }]; +} + +#pragma mark - Duration Section +- (void)setupDurationSection { + self.durationLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_16")]; + [self.contentView addSubview:self.durationLabel]; + self.durationView = [self createSelectionViewWithPlaceholder:YMLocalizedString(@"XPAnchorPKTableViewCell2") target:self action:@selector(selectDurationTapped)]; + [self.contentView addSubview:self.durationView]; + [self.durationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.startTimeView.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + [self.durationView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.durationLabel.mas_bottom).offset(kVerticalPadding); + make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding); + make.height.mas_equalTo(40); + }]; +} + +#pragma mark - Event Content Section +- (void)setupEventContentSection { + self.eventContentLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_17")]; + [self.contentView addSubview:self.eventContentLabel]; + self.eventContentTextView = [[UITextView alloc] init]; + self.eventContentTextView.backgroundColor = UIColorFromRGB(0xf2f3f7); + self.eventContentTextView.font = kFontRegular(14); + self.eventContentTextView.textColor = UIColorFromRGB(0x313131); + self.eventContentTextView.layer.cornerRadius = 8; + self.eventContentTextView.delegate = self; + [self.contentView addSubview:self.eventContentTextView]; + self.eventContentCharCountLabel = [self createCharCountLabel]; + [self.contentView addSubview:self.eventContentCharCountLabel]; + [self.eventContentLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.durationView.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + [self.eventContentTextView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.eventContentLabel.mas_bottom).offset(kVerticalPadding); + make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding); + make.height.mas_equalTo(152); + }]; + [self.eventContentCharCountLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.eventContentLabel); + make.trailing.equalTo(self.eventContentTextView.mas_trailing); + }]; +} + +#pragma mark - Notify My Fans Section +- (void)setupNotifyMyFansSection { + self.notifyFansLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_18")]; + [self.contentView addSubview:self.notifyFansLabel]; + self.notifyFansSwitch = [[UISwitch alloc] init]; + [self.contentView addSubview:self.notifyFansSwitch]; + [self.notifyFansLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.eventContentTextView.mas_bottom).offset(kSectionSpacing); + make.leading.equalTo(self.contentView).offset(kHorizontalPadding); + }]; + [self.notifyFansSwitch mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.notifyFansLabel); + make.trailing.equalTo(self.contentView).offset(-kHorizontalPadding); + make.bottom.equalTo(self.contentView).offset(-kSectionSpacing); + }]; + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.greaterThanOrEqualTo(self.notifyFansSwitch.mas_bottom).offset(20 + 60); + }]; +} + +@end diff --git a/YuMi/Modules/YMNewHome/View/EventCenterViewController.m b/YuMi/Modules/YMNewHome/View/EventCenterViewController.m index 13c3c263..eb68c298 100644 --- a/YuMi/Modules/YMNewHome/View/EventCenterViewController.m +++ b/YuMi/Modules/YMNewHome/View/EventCenterViewController.m @@ -9,6 +9,7 @@ #import "EventCenterPresenter.h" #import "EventCenterEventCell.h" #import "EventCenterOfficialCell.h" +#import "CreateEventViewControllerV2.h" @interface EventCenterViewController () @@ -196,7 +197,8 @@ } - (void)didTapCreateButton { - + CreateEventViewControllerV2 *createEventVC = [[CreateEventViewControllerV2 alloc] init]; + [self.navigationController pushViewController:createEventVC animated:YES]; } #pragma mark - UITableViewDataSource diff --git a/YuMi/Modules/YMRoom/View/AnchorPK/View/Cell/XPAnchorPKTableViewCell.m b/YuMi/Modules/YMRoom/View/AnchorPK/View/Cell/XPAnchorPKTableViewCell.m index 1fe1279e..ed34080f 100644 --- a/YuMi/Modules/YMRoom/View/AnchorPK/View/Cell/XPAnchorPKTableViewCell.m +++ b/YuMi/Modules/YMRoom/View/AnchorPK/View/Cell/XPAnchorPKTableViewCell.m @@ -127,7 +127,7 @@ _selectButton.userInteractionEnabled = YES; _selectButton.layer.cornerRadius = 12; _selectButton.layer.masksToBounds = YES; - [_selectButton setTitle:YMLocalizedString(@"XPAnchorPKTableViewCell3") forState:UIControlStateNormal]; + [_selectButton setTitle:YMLocalizedString(@"XPAnchorPKTableViewCell2") forState:UIControlStateNormal]; _selectButton.titleLabel.font = [UIFont systemFontOfSize:12]; [_selectButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } diff --git a/YuMi/Modules/YMRoom/View/SendGiftView/Model/GiftInfoModel.h b/YuMi/Modules/YMRoom/View/SendGiftView/Model/GiftInfoModel.h index 195cfb75..27690002 100644 --- a/YuMi/Modules/YMRoom/View/SendGiftView/Model/GiftInfoModel.h +++ b/YuMi/Modules/YMRoom/View/SendGiftView/Model/GiftInfoModel.h @@ -28,6 +28,7 @@ typedef NS_ENUM(NSUInteger, GiftType) { GiftType_CP = 19, // CP GiftType_Custom = 20, // 定制 GiftType_Bravo = 21, // 超级礼物 + GiftType_Lucky25 = 25, // 超级礼物 }; //礼物类型 diff --git a/YuMi/Modules/YMRoom/View/SendGiftView/View/PIGiftInfoSegmentedView.m b/YuMi/Modules/YMRoom/View/SendGiftView/View/PIGiftInfoSegmentedView.m index 7ab34fbc..f9bd9b6b 100644 --- a/YuMi/Modules/YMRoom/View/SendGiftView/View/PIGiftInfoSegmentedView.m +++ b/YuMi/Modules/YMRoom/View/SendGiftView/View/PIGiftInfoSegmentedView.m @@ -49,6 +49,8 @@ @property (nonatomic,strong)XPGiftInfoView *countryVC; /// 幸运 24 @property (nonatomic,strong)XPGiftInfoView *lucky24VC; +/// 幸运 25 +@property (nonatomic,strong)XPGiftInfoView *lucky25VC; /// cp @property (nonatomic,strong)XPGiftInfoView *cpVC; /// 定制 @@ -201,6 +203,10 @@ return self.superLuckyVC; } break; + case GiftType_Lucky25: { + return self.lucky25VC; + } + break; case GiftType_Country:{ return self.countryVC; } @@ -231,7 +237,7 @@ return i; } else if (tabGiftType == GiftType_Lucky && self.segmentType == GiftSegmentType_Lucky) { return i; - } else if ((tabGiftType == GiftType_super || tabGiftType == GiftType_Lucky24) && self.segmentType == GiftSegmentType_SuperLucky) { + } else if ((tabGiftType == GiftType_super || tabGiftType == GiftType_Lucky24 || tabGiftType == GiftType_Lucky25) && self.segmentType == GiftSegmentType_SuperLucky) { return i; } else if (tabGiftType == GiftType_WeekStar && self.segmentType == GiftSegmentType_WeekStar) { return i; @@ -248,6 +254,9 @@ } else if (tabGiftType == GiftType_Bravo && self.segmentType == GiftSegmentType_Bravo) { return i; } +// else if (tabGiftType == GiftType_Bravo && self.segmentType == GiftSegmentType_Bravo) { +// return i; +// } } return 0; @@ -533,6 +542,14 @@ } return _superLuckyVC; } +-(XPGiftInfoView *)lucky25VC{ + if(!_lucky25VC){ + _lucky25VC = [[XPGiftInfoView alloc]init]; + _lucky25VC.delegate = self; + _lucky25VC.segmentType = GiftSegmentType_SuperLucky; + } + return _lucky25VC; +} -(XPGiftInfoView *)countryVC{ if(!_countryVC){ _countryVC = [[XPGiftInfoView alloc]init]; diff --git a/YuMi/Modules/YMRoom/View/SendGiftView/View/XPSendGiftView.m b/YuMi/Modules/YMRoom/View/SendGiftView/View/XPSendGiftView.m index 2d8421c3..80d6a2dc 100644 --- a/YuMi/Modules/YMRoom/View/SendGiftView/View/XPSendGiftView.m +++ b/YuMi/Modules/YMRoom/View/SendGiftView/View/XPSendGiftView.m @@ -608,6 +608,7 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView; if (giftInfo.giftType != GiftType_Game && giftInfo.giftType != GiftType_super && giftInfo.giftType != GiftType_Lucky24 && + giftInfo.giftType != GiftType_Lucky25 && giftInfo.giftType != GiftType_Bravo) { [[GiftComboManager sharedManager] enableToCombo:NO]; return; diff --git a/YuMi/ar.lproj/Localizable.strings b/YuMi/ar.lproj/Localizable.strings index 5c3dc2f4..ff87b2e4 100644 --- a/YuMi/ar.lproj/Localizable.strings +++ b/YuMi/ar.lproj/Localizable.strings @@ -1460,7 +1460,6 @@ ineHeadView12" = "الحمل"; "XPAnchorPKTableViewCell0" = "PK مع المضيف"; "XPAnchorPKTableViewCell1" = "غير متصل"; "XPAnchorPKTableViewCell2" = "اختيار"; -"XPAnchorPKTableViewCell3" = "اختيار"; "XPAnchorPKSelectRoomView0" = "لا يوجد المزيد من الغرف"; "XPAnchorPKSelectRoomView1" = "الرجاء إدخال معرف الغرفة التي ترغب في البحث عنها"; @@ -4178,3 +4177,13 @@ ineHeadView12" = "الحمل"; "20.20.59_text_6" = "Unsub"; "20.20.59_text_7" = "Participate"; "20.20.59_text_8" = "Create Event"; +"20.20.59_text_9" = "Event Title"; +"20.20.59_text_10" = "Event Banner"; +"20.20.59_text_11" = "Upload Banner to Homepage(Costs 1000)"; +"20.20.59_text_12" = "YES"; +"20.20.59_text_13" = "NO"; +"20.20.59_text_14" = "Select Room"; +"20.20.59_text_15" = "Start Time"; +"20.20.59_text_16" = "Duration"; +"20.20.59_text_17" = "Event Content"; +"20.20.59_text_18" = "Notify My Fans"; diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings index e5765619..c5f7ef1c 100644 --- a/YuMi/en.lproj/Localizable.strings +++ b/YuMi/en.lproj/Localizable.strings @@ -1196,7 +1196,6 @@ "XPAnchorPKTableViewCell0" = "In PK"; "XPAnchorPKTableViewCell1" = "Offline"; "XPAnchorPKTableViewCell2" = "Select"; -"XPAnchorPKTableViewCell3" = "Select"; "XPAnchorPKSelectRoomView0" = "No more rooms"; "XPAnchorPKSelectRoomView1" = "Please enter the room ID to search"; @@ -3963,3 +3962,14 @@ "20.20.59_text_6" = "Unsub"; "20.20.59_text_7" = "Participate"; "20.20.59_text_8" = "Create Event"; +"20.20.59_text_9" = "Event Title"; +"20.20.59_text_10" = "Event Banner"; +"20.20.59_text_11" = "Upload Banner to Homepage(Costs 1000)"; +"20.20.59_text_12" = "YES"; +"20.20.59_text_13" = "NO"; +"20.20.59_text_14" = "Select Room"; +"20.20.59_text_15" = "Start Time"; +"20.20.59_text_16" = "Duration"; +"20.20.59_text_17" = "Event Content"; +"20.20.59_text_18" = "Notify My Fans"; + diff --git a/YuMi/tr.lproj/Localizable.strings b/YuMi/tr.lproj/Localizable.strings index 06272634..d6e22351 100644 --- a/YuMi/tr.lproj/Localizable.strings +++ b/YuMi/tr.lproj/Localizable.strings @@ -798,7 +798,6 @@ "XPAnchorPKTableViewCell0" = "PK devam ediyor"; "XPAnchorPKTableViewCell1" = "Çevrimdışı"; "XPAnchorPKTableViewCell2" = "Seç"; -"XPAnchorPKTableViewCell3" = "Seç"; "XPAnchorPKSelectRoomView0" = "Daha fazla oda yok"; "XPAnchorPKSelectRoomView1" = "Aramak istediğiniz salon ID'sini girin"; @@ -3756,3 +3755,13 @@ "20.20.59_text_6" = "Unsub"; "20.20.59_text_7" = "Participate"; "20.20.59_text_8" = "Create Event"; +"20.20.59_text_9" = "Event Title"; +"20.20.59_text_10" = "Event Banner"; +"20.20.59_text_11" = "Upload Banner to Homepage(Costs 1000)"; +"20.20.59_text_12" = "YES"; +"20.20.59_text_13" = "NO"; +"20.20.59_text_14" = "Select Room"; +"20.20.59_text_15" = "Start Time"; +"20.20.59_text_16" = "Duration"; +"20.20.59_text_17" = "Event Content"; +"20.20.59_text_18" = "Notify My Fans"; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index e68daf5b..22ec92af 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -818,7 +818,6 @@ "XPAnchorPKTableViewCell0" = "PK中"; "XPAnchorPKTableViewCell1" = "離線"; "XPAnchorPKTableViewCell2" = "選擇"; -"XPAnchorPKTableViewCell3" = "選擇"; "XPAnchorPKSelectRoomView0" = "沒有更多房間了"; "XPAnchorPKSelectRoomView1" = "請輸入要搜索的廳ID"; @@ -3628,3 +3627,13 @@ "20.20.59_text_6" = "Unsub"; "20.20.59_text_7" = "Participate"; "20.20.59_text_8" = "Create Event"; +"20.20.59_text_9" = "Event Title"; +"20.20.59_text_10" = "Event Banner"; +"20.20.59_text_11" = "Upload Banner to Homepage(Costs 1000)"; +"20.20.59_text_12" = "YES"; +"20.20.59_text_13" = "NO"; +"20.20.59_text_14" = "Select Room"; +"20.20.59_text_15" = "Start Time"; +"20.20.59_text_16" = "Duration"; +"20.20.59_text_17" = "Event Content"; +"20.20.59_text_18" = "Notify My Fans";