创建事件 create event UI

This commit is contained in:
edwinQQQ
2025-05-12 17:37:58 +08:00
parent ffdfa121f9
commit 2c5a1a289e
26 changed files with 1336 additions and 7 deletions

View File

@@ -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 = "<group>"; };
4C815A152CFEB758002A46A6 /* SuperBlockViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SuperBlockViewController.h; sourceTree = "<group>"; };
4C815A162CFEB758002A46A6 /* SuperBlockViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SuperBlockViewController.m; sourceTree = "<group>"; };
4C85DB7C2DCDD70400FD9839 /* CreateEventViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventViewController.h; sourceTree = "<group>"; };
4C85DB7D2DCDD70400FD9839 /* CreateEventViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventViewController.m; sourceTree = "<group>"; };
4C85DB7F2DCDD83E00FD9839 /* CreateEventPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventPresenter.h; sourceTree = "<group>"; };
4C85DB802DCDD83E00FD9839 /* CreateEventPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventPresenter.m; sourceTree = "<group>"; };
4C85DB822DCDDD6800FD9839 /* CreateEventViewControllerV2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventViewControllerV2.h; sourceTree = "<group>"; };
4C85DB832DCDDD6800FD9839 /* CreateEventViewControllerV2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventViewControllerV2.m; sourceTree = "<group>"; };
4C864A002D55F4F600191AE0 /* LuckyPackagePresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LuckyPackagePresenter.h; sourceTree = "<group>"; };
4C864A012D55F4F600191AE0 /* LuckyPackagePresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LuckyPackagePresenter.m; sourceTree = "<group>"; };
4C864A032D561E1D00191AE0 /* LuckyPackageLogicManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LuckyPackageLogicManager.h; sourceTree = "<group>"; };
@@ -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 = "<group>";
@@ -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 */,

View File

@@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

View File

@@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -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

View File

@@ -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. uploadToHomeYES
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.view showCreateSuccess];
});
}
@end

View File

@@ -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

View File

@@ -0,0 +1,253 @@
//
// CreateEventViewController.m
// YuMi
//
// Created by P on 2025/5/9.
//
#import "CreateEventViewController.h"
#import "CreateEventPresenter.h"
#import <Masonry/Masonry.h>
@interface CreateEventViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@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<UIImagePickerControllerInfoKey,id> *)info {
UIImage *selectedImage = info[UIImagePickerControllerOriginalImage];
self.bannerImageView.image = selectedImage;
[picker dismissViewControllerAnimated:YES completion:nil];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:nil];
}
@end

View File

@@ -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

View File

@@ -0,0 +1,709 @@
//
// CreateEventViewControllerV2.m
// YuMi
//
// Created by P on 2025/5/9.
//
#import "CreateEventViewControllerV2.h"
#import <Masonry/Masonry.h>
#import <PhotosUI/PhotosUI.h>
#define MAX_EVENT_TITLE_LENGTH 20
#define MAX_EVENT_CONTENT_LENGTH 100
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
//
- (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<UIImagePickerControllerInfoKey,id> *)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<PHPickerResult *> *)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<NSItemProviderReading> _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

View File

@@ -9,6 +9,7 @@
#import "EventCenterPresenter.h"
#import "EventCenterEventCell.h"
#import "EventCenterOfficialCell.h"
#import "CreateEventViewControllerV2.h"
@interface EventCenterViewController () <UIPageViewControllerDataSource, UIPageViewControllerDelegate, UITableViewDelegate, UITableViewDataSource>
@@ -196,7 +197,8 @@
}
- (void)didTapCreateButton {
CreateEventViewControllerV2 *createEventVC = [[CreateEventViewControllerV2 alloc] init];
[self.navigationController pushViewController:createEventVC animated:YES];
}
#pragma mark - UITableViewDataSource

View File

@@ -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];
}

View File

@@ -28,6 +28,7 @@ typedef NS_ENUM(NSUInteger, GiftType) {
GiftType_CP = 19, // CP
GiftType_Custom = 20, // 定制
GiftType_Bravo = 21, // 超级礼物
GiftType_Lucky25 = 25, // 超级礼物
};
//礼物类型

View File

@@ -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];

View File

@@ -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;

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";