创建事件 create event UI
This commit is contained in:
@@ -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 */,
|
||||
|
21
YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/切图 25@3x.png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_arrow.imageset/切图 25@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 948 B |
21
YuMi/Assets.xcassets/20.20.59/event_camear.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_camear.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_camear.imageset/组 7158@3x.png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_camear.imageset/组 7158@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
21
YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/勾选@3x.png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_non_select.imageset/勾选@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
21
YuMi/Assets.xcassets/20.20.59/event_selected.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_selected.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_selected.imageset/勾选@3x (1).png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_selected.imageset/勾选@3x (1).png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
21
YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/组 8424@3x.png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_take_photo.imageset/组 8424@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
25
YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.h
Normal file
25
YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.h
Normal 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
|
74
YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.m
Normal file
74
YuMi/Modules/YMNewHome/Presenter/CreateEventPresenter.m
Normal 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. 如果uploadToHome为YES,将横幅上传到主页
|
||||
|
||||
// 模拟网络请求成功
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self.view showCreateSuccess];
|
||||
});
|
||||
}
|
||||
|
||||
@end
|
22
YuMi/Modules/YMNewHome/View/CreateEventViewController.h
Normal file
22
YuMi/Modules/YMNewHome/View/CreateEventViewController.h
Normal 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
|
253
YuMi/Modules/YMNewHome/View/CreateEventViewController.m
Normal file
253
YuMi/Modules/YMNewHome/View/CreateEventViewController.m
Normal 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
|
65
YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.h
Normal file
65
YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.h
Normal 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
|
709
YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.m
Normal file
709
YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.m
Normal 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
|
@@ -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
|
||||
|
@@ -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];
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@ typedef NS_ENUM(NSUInteger, GiftType) {
|
||||
GiftType_CP = 19, // CP
|
||||
GiftType_Custom = 20, // 定制
|
||||
GiftType_Bravo = 21, // 超级礼物
|
||||
GiftType_Lucky25 = 25, // 超级礼物
|
||||
};
|
||||
|
||||
//礼物类型
|
||||
|
@@ -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];
|
||||
|
@@ -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;
|
||||
|
@@ -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";
|
||||
|
@@ -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";
|
||||
|
||||
|
@@ -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";
|
||||
|
@@ -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";
|
||||
|
Reference in New Issue
Block a user