更新活动中心模块,新增事件配置模型及相关API接口,优化事件列表展示,修复部分UI问题,更新本地化字符串,调整部分UI组件。删除不再使用的视图控制器。版本号更新至20.20.61。
This commit is contained in:
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -8,11 +8,13 @@
|
||||
],
|
||||
"cSpell.words": [
|
||||
"autoreleasepool",
|
||||
"Autoresizing",
|
||||
"Bugly",
|
||||
"MSRTL",
|
||||
"NIMSDK",
|
||||
"Nonnull",
|
||||
"NSEC",
|
||||
"Procotol",
|
||||
"Subview",
|
||||
"Superview",
|
||||
"Uids"
|
||||
|
@@ -489,6 +489,7 @@
|
||||
23FF42762AA6E1480055733C /* XPHomeRecommendOtherRoomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF42752AA6E1480055733C /* XPHomeRecommendOtherRoomView.m */; };
|
||||
23FF42792AA6E19C0055733C /* HomeMenuSourceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF42782AA6E19C0055733C /* HomeMenuSourceModel.m */; };
|
||||
23FF428E2AAB2D3A0055733C /* XPCandyTreeBuyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF428D2AAB2D3A0055733C /* XPCandyTreeBuyView.m */; };
|
||||
4C1119722DD7218300C18416 /* MyEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1119712DD7218300C18416 /* MyEventsViewController.m */; };
|
||||
4C1392932D6D963700A6DFB5 /* SubRechargersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1392922D6D963600A6DFB5 /* SubRechargersViewController.m */; };
|
||||
4C1392962D6DA22B00A6DFB5 /* RechargerTransferHistoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1392952D6DA22B00A6DFB5 /* RechargerTransferHistoryViewController.m */; };
|
||||
4C1392992D6DB4CD00A6DFB5 /* MoliMoneyLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1392982D6DB4CD00A6DFB5 /* MoliMoneyLabel.m */; };
|
||||
@@ -497,6 +498,7 @@
|
||||
4C1892992CF84349004D4426 /* RoomCahtCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1892982CF84349004D4426 /* RoomCahtCell.m */; };
|
||||
4C1A141B2DCB4AB700B6D0CA /* ChatFaceVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A141A2DCB4AB700B6D0CA /* ChatFaceVo.m */; };
|
||||
4C3475C42DD1FE590099B984 /* CreateEventSelectRoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3475C32DD1FE590099B984 /* CreateEventSelectRoomViewController.m */; };
|
||||
4C3851992DD5F4D50089CFCC /* EventConfigModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3851982DD5F4D50089CFCC /* EventConfigModel.m */; };
|
||||
4C38C2AD2D84064400CFA4A8 /* LoginInputItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C38C2AC2D84064300CFA4A8 /* LoginInputItemView.m */; };
|
||||
4C38C2B02D84070600CFA4A8 /* AccountBindingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C38C2AF2D84070600CFA4A8 /* AccountBindingViewController.m */; };
|
||||
4C44BD5D2D151B5C00F321FA /* RoomSideMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C44BD5C2D151B5C00F321FA /* RoomSideMenu.m */; };
|
||||
@@ -523,7 +525,6 @@
|
||||
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 */; };
|
||||
@@ -549,6 +550,7 @@
|
||||
4CC312272D79A10100F57A07 /* ShareProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC312262D79A10100F57A07 /* ShareProvider.m */; };
|
||||
4CC6195A2CEC7770008C1EE8 /* MyDressingDataPresent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC619592CEC7770008C1EE8 /* MyDressingDataPresent.m */; };
|
||||
4CC6195D2CEC996E008C1EE8 /* MyDressingDataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6195C2CEC996E008C1EE8 /* MyDressingDataModel.m */; };
|
||||
4CCB809F2DD5DFDF00C756D3 /* EventRoomModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB809E2DD5DFDF00C756D3 /* EventRoomModel.m */; };
|
||||
4CCFDA002DD59038009BD2FD /* EventCenterEmptyCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFD9FF2DD59038009BD2FD /* EventCenterEmptyCell.m */; };
|
||||
4CCFDA032DD59211009BD2FD /* Api+EventCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFDA022DD59211009BD2FD /* Api+EventCenter.m */; };
|
||||
4CCFDA062DD5C127009BD2FD /* EventItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFDA052DD5C127009BD2FD /* EventItemModel.m */; };
|
||||
@@ -2632,6 +2634,8 @@
|
||||
23FF42782AA6E19C0055733C /* HomeMenuSourceModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeMenuSourceModel.m; sourceTree = "<group>"; };
|
||||
23FF428C2AAB2D3A0055733C /* XPCandyTreeBuyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPCandyTreeBuyView.h; sourceTree = "<group>"; };
|
||||
23FF428D2AAB2D3A0055733C /* XPCandyTreeBuyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPCandyTreeBuyView.m; sourceTree = "<group>"; };
|
||||
4C1119702DD7218300C18416 /* MyEventsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyEventsViewController.h; sourceTree = "<group>"; };
|
||||
4C1119712DD7218300C18416 /* MyEventsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyEventsViewController.m; sourceTree = "<group>"; };
|
||||
4C1392912D6D963600A6DFB5 /* SubRechargersViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubRechargersViewController.h; sourceTree = "<group>"; };
|
||||
4C1392922D6D963600A6DFB5 /* SubRechargersViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubRechargersViewController.m; sourceTree = "<group>"; };
|
||||
4C1392942D6DA22B00A6DFB5 /* RechargerTransferHistoryViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RechargerTransferHistoryViewController.h; sourceTree = "<group>"; };
|
||||
@@ -2646,6 +2650,8 @@
|
||||
4C1A141A2DCB4AB700B6D0CA /* ChatFaceVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChatFaceVo.m; sourceTree = "<group>"; };
|
||||
4C3475C22DD1FE590099B984 /* CreateEventSelectRoomViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventSelectRoomViewController.h; sourceTree = "<group>"; };
|
||||
4C3475C32DD1FE590099B984 /* CreateEventSelectRoomViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventSelectRoomViewController.m; sourceTree = "<group>"; };
|
||||
4C3851972DD5F4D50089CFCC /* EventConfigModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventConfigModel.h; sourceTree = "<group>"; };
|
||||
4C3851982DD5F4D50089CFCC /* EventConfigModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EventConfigModel.m; sourceTree = "<group>"; };
|
||||
4C38C2AB2D84064300CFA4A8 /* LoginInputItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginInputItemView.h; sourceTree = "<group>"; };
|
||||
4C38C2AC2D84064300CFA4A8 /* LoginInputItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginInputItemView.m; sourceTree = "<group>"; };
|
||||
4C38C2AE2D84070600CFA4A8 /* AccountBindingViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccountBindingViewController.h; sourceTree = "<group>"; };
|
||||
@@ -2696,8 +2702,6 @@
|
||||
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>"; };
|
||||
@@ -2746,6 +2750,8 @@
|
||||
4CC619592CEC7770008C1EE8 /* MyDressingDataPresent.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyDressingDataPresent.m; sourceTree = "<group>"; };
|
||||
4CC6195B2CEC996E008C1EE8 /* MyDressingDataModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyDressingDataModel.h; sourceTree = "<group>"; };
|
||||
4CC6195C2CEC996E008C1EE8 /* MyDressingDataModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyDressingDataModel.m; sourceTree = "<group>"; };
|
||||
4CCB809D2DD5DFDF00C756D3 /* EventRoomModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventRoomModel.h; sourceTree = "<group>"; };
|
||||
4CCB809E2DD5DFDF00C756D3 /* EventRoomModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EventRoomModel.m; sourceTree = "<group>"; };
|
||||
4CCFD9FE2DD59038009BD2FD /* EventCenterEmptyCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventCenterEmptyCell.h; sourceTree = "<group>"; };
|
||||
4CCFD9FF2DD59038009BD2FD /* EventCenterEmptyCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EventCenterEmptyCell.m; sourceTree = "<group>"; };
|
||||
4CCFDA012DD59211009BD2FD /* Api+EventCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+EventCenter.h"; sourceTree = "<group>"; };
|
||||
@@ -10096,12 +10102,12 @@
|
||||
541DD9542C1EDEFB00B616C4 /* XPHomePagingViewController.m */,
|
||||
4CBDC4222DC0B078005A75B9 /* EventCenterViewController.h */,
|
||||
4CBDC4232DC0B078005A75B9 /* EventCenterViewController.m */,
|
||||
4C85DB7C2DCDD70400FD9839 /* CreateEventViewController.h */,
|
||||
4C85DB7D2DCDD70400FD9839 /* CreateEventViewController.m */,
|
||||
4C85DB822DCDDD6800FD9839 /* CreateEventViewControllerV2.h */,
|
||||
4C85DB832DCDDD6800FD9839 /* CreateEventViewControllerV2.m */,
|
||||
4C3475C22DD1FE590099B984 /* CreateEventSelectRoomViewController.h */,
|
||||
4C3475C32DD1FE590099B984 /* CreateEventSelectRoomViewController.m */,
|
||||
4C1119702DD7218300C18416 /* MyEventsViewController.h */,
|
||||
4C1119712DD7218300C18416 /* MyEventsViewController.m */,
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
@@ -10146,6 +10152,10 @@
|
||||
54C389662C24464600FD47B1 /* HomeMineRoomModel.m */,
|
||||
4CCFDA042DD5C127009BD2FD /* EventItemModel.h */,
|
||||
4CCFDA052DD5C127009BD2FD /* EventItemModel.m */,
|
||||
4CCB809D2DD5DFDF00C756D3 /* EventRoomModel.h */,
|
||||
4CCB809E2DD5DFDF00C756D3 /* EventRoomModel.m */,
|
||||
4C3851972DD5F4D50089CFCC /* EventConfigModel.h */,
|
||||
4C3851982DD5F4D50089CFCC /* EventConfigModel.m */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
@@ -12268,6 +12278,7 @@
|
||||
E824544E26F5BC1A00BE8163 /* XPMineModifPayPwdView.m in Sources */,
|
||||
E86E79CD28A4E045006DAF48 /* MessageContentRiskAlertView.m in Sources */,
|
||||
E855515B280559FE005F293F /* NSDate+DateUtils.m in Sources */,
|
||||
4C3851992DD5F4D50089CFCC /* EventConfigModel.m in Sources */,
|
||||
544879F02CD22D4B00D58DC1 /* CustomRoomBGItemModel.m in Sources */,
|
||||
E8664EE327E47711000171BA /* XPRoomPKRecordNickView.m in Sources */,
|
||||
E8C1CD7327D8A16500376F83 /* XPRoomFaceTool.m in Sources */,
|
||||
@@ -12717,6 +12728,7 @@
|
||||
235A45232B04BEB6009753F5 /* PIBaseModel.m in Sources */,
|
||||
E8DEC9A82764A68B0078CB70 /* Api+MoreMenu.m in Sources */,
|
||||
9B86D87A2817DD8400494FCD /* XPRoomEnterHideTipView.m in Sources */,
|
||||
4CCB809F2DD5DFDF00C756D3 /* EventRoomModel.m in Sources */,
|
||||
23FE47E12BB41CF200F09D23 /* PINobleCenterListReusableView.m in Sources */,
|
||||
4CE746D52D92C1080094E496 /* BravoGiftWinningFlagView.m in Sources */,
|
||||
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */,
|
||||
@@ -12953,7 +12965,6 @@
|
||||
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 */,
|
||||
@@ -13332,6 +13343,7 @@
|
||||
E875FA8727D619820086ED04 /* ClientDataModel.m in Sources */,
|
||||
9BFB10222897D68400B3985E /* XPTabAnchorCardModel.m in Sources */,
|
||||
E8B846DC26FDE24300A777FE /* RechargeListModel.m in Sources */,
|
||||
4C1119722DD7218300C18416 /* MyEventsViewController.m in Sources */,
|
||||
9B1B7292280010E8003FACE9 /* Api+FansTeam.m in Sources */,
|
||||
4C815A172CFEB758002A46A6 /* SuperBlockViewController.m in Sources */,
|
||||
E8A3539728FE7C250014A784 /* XPWishGiftPresenter.m in Sources */,
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 87 KiB |
21
YuMi/Assets.xcassets/20.20.59/event_arrow_black.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_arrow_black.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "切图 25@3x (1).png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_arrow_black.imageset/切图 25@3x (1).png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_arrow_black.imageset/切图 25@3x (1).png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
21
YuMi/Assets.xcassets/20.20.59/event_delete.imageset/Contents.json
vendored
Normal file
21
YuMi/Assets.xcassets/20.20.59/event_delete.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "切图 68@3x (3).png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/20.20.59/event_delete.imageset/切图 68@3x (3).png
vendored
Normal file
BIN
YuMi/Assets.xcassets/20.20.59/event_delete.imageset/切图 68@3x (3).png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
@@ -76,7 +76,7 @@
|
||||
model.faceInitData = faceInitData;
|
||||
if (faceInitData) {
|
||||
[XPRoomFaceTool shareFaceTool].version = [NSString stringWithFormat:@"%@",faceInitData[@"version"]];
|
||||
[XPRoomFaceTool shareFaceTool].zipMd5 = [[NSString stringWithFormat:@"%@",faceInitData[@"zipMd5"]] uppercaseString];
|
||||
[XPRoomFaceTool shareFaceTool].zipMd5 = [[NSString stringWithFormat:@"%@",faceInitData[@"zipMd5"]] uppercaseString];
|
||||
[XPRoomFaceTool shareFaceTool].zipUrl = [NSString stringWithFormat:@"%@",faceInitData[@"zipUrl"]];
|
||||
///表情的数据保存本地
|
||||
[[XPRoomFaceTool shareFaceTool] saveFaceInfoList:faceInitData];
|
||||
|
@@ -54,10 +54,10 @@
|
||||
消息背景
|
||||
*/
|
||||
@property (nonatomic, strong) UIView * messageBackground;
|
||||
@property (nonatomic, strong) MASConstraint * messageBackgroundLeft;
|
||||
@property (nonatomic, strong) MASConstraint * messageBackgroundRight;
|
||||
@property (nonatomic, strong) MASConstraint * messageBackgroundLeftAvatar;
|
||||
@property (nonatomic, strong) MASConstraint * messageBackgroundRightAvatar;
|
||||
@property (nonatomic, strong) MASConstraint * bgLeadingToOtherAvatarTrailing;
|
||||
@property (nonatomic, strong) MASConstraint * bgTrailingToMeAvatarLeading;
|
||||
@property (nonatomic, strong) MASConstraint * bgLeadingToOtherAvatarLeading;
|
||||
@property (nonatomic, strong) MASConstraint * bgTrailingToMeAvatarTrailing;
|
||||
/**
|
||||
消息内容实体
|
||||
*/
|
||||
@@ -108,11 +108,13 @@
|
||||
}];
|
||||
|
||||
[self.messageBackground mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
self.messageBackgroundLeft = make.leading.mas_equalTo(self.leftAvatar.mas_trailing).offset(15).priorityHigh();
|
||||
self.messageBackgroundRight = make.trailing.mas_equalTo(self.rightAvatar.mas_leading).offset(-15).priorityHigh();
|
||||
self.messageBackgroundLeftAvatar = make.leading.mas_equalTo(self.leftAvatar.mas_leading).priorityHigh();
|
||||
self.messageBackgroundRightAvatar = make.trailing.mas_equalTo(self.rightAvatar.mas_trailing).priorityHigh();
|
||||
self.bgLeadingToOtherAvatarTrailing = make.leading.mas_equalTo(self.contentView).offset(75).priorityHigh();
|
||||
self.bgTrailingToMeAvatarLeading = make.trailing.mas_equalTo(self.contentView).offset(-75).priorityHigh();
|
||||
self.bgLeadingToOtherAvatarLeading = make.leading.mas_equalTo(self.contentView).offset(15).priorityHigh();
|
||||
self.bgTrailingToMeAvatarTrailing = make.trailing.mas_equalTo(self.contentView).offset(-15).priorityHigh();
|
||||
make.top.mas_equalTo(self).offset(20);
|
||||
// 添加最大宽度约束,确保消息背景不会超出右侧边缘
|
||||
make.width.lessThanOrEqualTo(self.contentView.mas_width).multipliedBy(0.75);
|
||||
}];
|
||||
|
||||
[self.failButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
@@ -220,33 +222,21 @@
|
||||
self.leftAvatar.hidden = YES;
|
||||
self.rightAvatar.hidden = NO;
|
||||
|
||||
if ([classStr isEqualToString:@"AgentMessageTableViewCell"]) {
|
||||
[self.messageBackgroundLeft uninstall];
|
||||
[self.messageBackgroundLeftAvatar install];
|
||||
[self.messageBackgroundRight install];
|
||||
[self.messageBackgroundRightAvatar uninstall];
|
||||
} else {
|
||||
[self.messageBackgroundLeft install];
|
||||
[self.messageBackgroundLeftAvatar uninstall];
|
||||
[self.messageBackgroundRight install];
|
||||
[self.messageBackgroundRightAvatar uninstall];
|
||||
}
|
||||
[self.bgLeadingToOtherAvatarTrailing uninstall];
|
||||
[self.bgLeadingToOtherAvatarLeading uninstall];
|
||||
[self.bgTrailingToMeAvatarLeading install];
|
||||
[self.bgTrailingToMeAvatarTrailing uninstall];
|
||||
|
||||
self.rightAvatar.imageUrl = avatarUrl;
|
||||
} else {
|
||||
self.leftAvatar.hidden = NO;
|
||||
self.rightAvatar.hidden = YES;
|
||||
|
||||
if ([classStr isEqualToString:@"AgentMessageTableViewCell"]) {
|
||||
[self.messageBackgroundLeft install];
|
||||
[self.messageBackgroundLeftAvatar uninstall];
|
||||
[self.messageBackgroundRight uninstall];
|
||||
[self.messageBackgroundRightAvatar install];
|
||||
} else {
|
||||
[self.messageBackgroundLeft install];
|
||||
[self.messageBackgroundRight install];
|
||||
[self.messageBackgroundLeftAvatar uninstall];
|
||||
[self.messageBackgroundRightAvatar uninstall];
|
||||
}
|
||||
[self.bgLeadingToOtherAvatarTrailing install];
|
||||
[self.bgTrailingToMeAvatarLeading uninstall];
|
||||
[self.bgLeadingToOtherAvatarLeading uninstall];
|
||||
[self.bgTrailingToMeAvatarTrailing uninstall];
|
||||
|
||||
self.leftAvatar.imageUrl = avatarUrl;
|
||||
}
|
||||
|
||||
@@ -274,8 +264,8 @@
|
||||
//MARK: 不太理解原来的 layout 关系,对开黑卡特殊处理
|
||||
if ([classStr isEqualToString:@"MessageGameOrderView"]) {
|
||||
[self.messageBackground mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
self.messageBackgroundLeft = make.leading.mas_equalTo(self.leftAvatar.mas_trailing).offset(15);
|
||||
self.messageBackgroundRight = make.trailing.mas_equalTo(self.rightAvatar.mas_leading).offset(-15);
|
||||
self.bgLeadingToOtherAvatarTrailing = make.leading.mas_equalTo(self.contentView).offset(75);
|
||||
self.bgTrailingToMeAvatarLeading = make.trailing.mas_equalTo(self.contentView).offset(-75);
|
||||
make.top.mas_equalTo(self).offset(20);
|
||||
make.height.mas_equalTo(98 + MESSAGE_PADDING);
|
||||
}];
|
||||
@@ -285,9 +275,9 @@
|
||||
}];
|
||||
} else {
|
||||
[self.messageContent mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.edges.mas_equalTo(self.messageBackground);
|
||||
make.top.bottom.mas_equalTo(self.messageBackground);
|
||||
make.size.mas_equalTo(self.messageBackground);
|
||||
make.edges.mas_equalTo(self.messageBackground);
|
||||
// make.top.bottom.mas_equalTo(self.messageBackground);
|
||||
// make.size.mas_equalTo(self.messageBackground);
|
||||
}];
|
||||
}
|
||||
|
||||
|
@@ -7,9 +7,12 @@
|
||||
|
||||
#import "PublicEventTableViewCell.h"
|
||||
#import "MessagePublicEventModel.h"
|
||||
#import "XPRoomViewController.h"
|
||||
#import "XCCurrentVCStackManager.h"
|
||||
|
||||
@interface PublicEventTableViewCell ()
|
||||
|
||||
@property (nonatomic, strong) MessagePublicEventModel *model;
|
||||
@property (nonatomic, strong) NetImageView *topImageView;
|
||||
@property (nonatomic, strong) UIImageView *roomIcon;
|
||||
@property (nonatomic, strong) UILabel *roomIDLabel;
|
||||
@@ -65,13 +68,23 @@
|
||||
}
|
||||
|
||||
- (void)didTapJoinButton {
|
||||
|
||||
[XPRoomViewController openRoom:@(self.model.roomUid).stringValue
|
||||
viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
}
|
||||
|
||||
- (void)render:(MessageBaseModel *)message {
|
||||
if ([message isKindOfClass:[MessagePublicEventModel class]]) {
|
||||
MessagePublicEventModel *model = (MessagePublicEventModel *)message;
|
||||
NSLog(@"%@", model);
|
||||
self.model = model;
|
||||
// NSLog(@"%@", model);
|
||||
self.topImageView.imageUrl = model.eventBanner;
|
||||
self.roomIDLabel.text = [NSString stringWithFormat:YMLocalizedString(@"XPMineGuildViewController6"),
|
||||
@(model.roomErbanNO)];
|
||||
if ([AccountInfoStorage instance].getUid.integerValue == model.roomUid) {
|
||||
self.eventDescLabel.text = YMLocalizedString(@"20.20.59_text_26");
|
||||
} else {
|
||||
self.eventDescLabel.text = YMLocalizedString(@"20.20.59_text_27");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +109,7 @@
|
||||
|
||||
- (UILabel *)roomIDLabel {
|
||||
if (!_roomIDLabel) {
|
||||
_roomIDLabel = [UILabel labelInitWithText:YMLocalizedString(@"XPMineGuildViewController6")
|
||||
_roomIDLabel = [UILabel labelInitWithText:@""
|
||||
font:kFontRegular(13)
|
||||
textColor:UIColorFromRGB(0x313131)];
|
||||
}
|
||||
@@ -105,7 +118,7 @@
|
||||
|
||||
- (UILabel *)eventDescLabel {
|
||||
if (!_eventDescLabel) {
|
||||
_eventDescLabel = [UILabel labelInitWithText:@"Your Event is about to start! Your fans and subscribers have been notified!"
|
||||
_eventDescLabel = [UILabel labelInitWithText:@""
|
||||
font:kFontMedium(14)
|
||||
textColor:UIColorFromRGB(0x313131)];
|
||||
_eventDescLabel.numberOfLines = 0;
|
||||
|
@@ -26,9 +26,6 @@
|
||||
NSDictionary *data = attachment.data;
|
||||
if (data) {
|
||||
AgentMessageModel *model = [AgentMessageModel modelWithJSON:data];
|
||||
//#if DEBUG
|
||||
// model.url = @"/guildMember/quitAudit?uid\\u003d3456\\u0026";
|
||||
//#endif
|
||||
self.url = model.url;
|
||||
self.title = model.title;
|
||||
self.content = model.content;
|
||||
|
@@ -17,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, copy) NSString *eventTopic;
|
||||
@property (nonatomic, copy) NSString *eventDetail;
|
||||
@property (nonatomic, assign) NSInteger type;
|
||||
@property (nonatomic, assign) NSInteger roomErbanNo;
|
||||
@property (nonatomic, assign) NSInteger roomErbanNO;
|
||||
|
||||
@end
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
//
|
||||
|
||||
#import "MessagePublicEventModel.h"
|
||||
|
||||
#import "AttachmentModel.h"
|
||||
@implementation MessagePublicEventModel
|
||||
|
||||
- (instancetype)initWithMessage:(NIMMessage *)message {
|
||||
@@ -14,8 +14,34 @@
|
||||
self.message = message;
|
||||
self.isHiddenAvatar = NO;
|
||||
self.messageType = SessionMessageType_Custom;
|
||||
// TODO: 计算高度
|
||||
self.height = 230;
|
||||
|
||||
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
|
||||
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
|
||||
NSDictionary *data = attachment.data;
|
||||
if (data) {
|
||||
MessagePublicEventModel *model = [MessagePublicEventModel modelWithJSON:data];
|
||||
self.eventBanner = model.eventBanner;
|
||||
self.roomUid = model.roomUid;
|
||||
self.id = model.id;
|
||||
self.eventTopic = model.eventTopic;
|
||||
self.eventDetail = model.eventDetail;
|
||||
self.type = model.type;
|
||||
self.roomErbanNO = model.roomErbanNO;
|
||||
}
|
||||
// CGSize maxSize = CGSizeMake(260, CGFLOAT_MAX);
|
||||
//
|
||||
// // 使用 NSString 的 boundingRectWithSize 方法来计算高度
|
||||
// CGRect textRect = [self.eventTopic boundingRectWithSize:maxSize
|
||||
// options:NSStringDrawingUsesLineFragmentOrigin
|
||||
// attributes:@{NSFontAttributeName: kFontMedium(14)}
|
||||
// context:nil];
|
||||
// CGFloat bannerHeight = 86;
|
||||
// CGFloat contentHeight = textRect.size.height;
|
||||
// CGFloat buttonHeight = 43;
|
||||
//
|
||||
// self.height = bannerHeight + contentHeight + buttonHeight + 28 + 28;
|
||||
|
||||
self.height = 240;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
@@ -235,10 +235,10 @@
|
||||
#pragma mark - cell的样式
|
||||
- (MessageBaseModel *)modeTransformMessage:(NIMMessage *)message {
|
||||
MessageBaseModel * model;
|
||||
#if DEBUG
|
||||
model = [[MessagePublicEventModel alloc] initWithMessage:message];
|
||||
return model;
|
||||
#endif
|
||||
//#if DEBUG
|
||||
// model = [[MessagePublicEventModel alloc] initWithMessage:message];
|
||||
// return model;
|
||||
//#endif
|
||||
switch (message.messageType) {
|
||||
case NIMMessageTypeText:
|
||||
model = [[MessageTextModel alloc] initWithMessage:message];
|
||||
@@ -267,16 +267,6 @@
|
||||
MessageBaseModel * model;
|
||||
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
|
||||
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
|
||||
// if (attachment.first == CustomMessageType_System_message) {
|
||||
// switch (attachment.second) {
|
||||
// case Custom_Message_Sub_System_message:
|
||||
// model = [[AgentMessageModel alloc] initWithMessage:message];
|
||||
// break;
|
||||
//
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
NSInteger first = attachment.first;
|
||||
NSInteger second = attachment.second;
|
||||
|
@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@class UserInfoModel;
|
||||
@interface XPMineBlackListTableViewCell : UITableViewCell
|
||||
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||
@property (nonatomic, copy)void(^handleTapRemove)(UserInfoModel *userInfo);
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -19,23 +19,26 @@
|
||||
@property (nonatomic,strong) NetImageView *avatarImageView;
|
||||
///昵称
|
||||
@property (nonatomic,strong) UILabel *nickLabel;
|
||||
@property (nonatomic, strong) UIButton *removeButton;
|
||||
|
||||
@end
|
||||
|
||||
@implementation XPMineBlackListTableViewCell
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
}
|
||||
return self;
|
||||
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
self.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor];
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
[self.contentView addSubview:self.avatarImageView];
|
||||
[self.contentView addSubview:self.nickLabel];
|
||||
[self.contentView addSubview:self.removeButton];
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
@@ -50,7 +53,21 @@
|
||||
make.trailing.mas_lessThanOrEqualTo(self.contentView).offset(-5);
|
||||
make.centerY.mas_equalTo(self.contentView);
|
||||
}];
|
||||
|
||||
[self.removeButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.trailing.mas_equalTo(self.contentView).offset(-8);
|
||||
make.centerY.mas_equalTo(self.contentView);
|
||||
make.height.mas_equalTo(30);
|
||||
make.width.mas_greaterThanOrEqualTo(60);
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)didTapRemove {
|
||||
if (_handleTapRemove) {
|
||||
self.handleTapRemove(self.userInfo);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (void)setUserInfo:(UserInfoModel *)userInfo {
|
||||
_userInfo = userInfo;
|
||||
@@ -81,4 +98,22 @@
|
||||
return _nickLabel;
|
||||
}
|
||||
|
||||
- (UIButton *)removeButton {
|
||||
if (!_removeButton) {
|
||||
_removeButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_removeButton.titleLabel setFont:kFontRegular(13)];
|
||||
[_removeButton setTitle:YMLocalizedString(@"XPMineBlackListViewController1") forState:UIControlStateNormal];
|
||||
[_removeButton setTitleColor:UIColorFromRGB(0xfcc074) forState:UIControlStateNormal];
|
||||
[_removeButton setCornerRadius:15
|
||||
corners:kCALayerMaxXMaxYCorner | kCALayerMaxXMinYCorner | kCALayerMinXMaxYCorner | kCALayerMinXMinYCorner
|
||||
borderWidth:1
|
||||
borderColor:UIColorFromRGB(0xfcc074)];
|
||||
_removeButton.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 10);
|
||||
_removeButton.titleLabel.lineBreakMode = NSLineBreakByClipping;
|
||||
_removeButton.clipsToBounds = NO;
|
||||
[_removeButton addTarget:self action:@selector(didTapRemove) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _removeButton;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -70,6 +70,16 @@
|
||||
if (self.datasource.count > 0) {
|
||||
XPMineBlackListTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineBlackListTableViewCell class])];
|
||||
cell.userInfo = [self.datasource xpSafeObjectAtIndex:indexPath.row];
|
||||
@kWeakify(self);
|
||||
[cell setHandleTapRemove:^(UserInfoModel * _Nonnull userInfo) {
|
||||
@kStrongify(self);
|
||||
[[NIMSDK sharedSDK].userManager removeFromBlackBlackList:[NSString stringWithFormat:@"%ld", userInfo.uid] completion:^(NSError * _Nullable error) {
|
||||
if (error == nil) {
|
||||
[self.datasource removeObject:userInfo];
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
}];
|
||||
}];
|
||||
return cell;
|
||||
}
|
||||
XPMineFriendEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineFriendEmptyTableViewCell class])];
|
||||
|
@@ -11,6 +11,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface Api(EventCenter)
|
||||
|
||||
/// 活動配置
|
||||
+ (void)usereventGoldConfig:(HttpRequestHelperCompletion)complection
|
||||
uid:(NSString *)uid;
|
||||
|
||||
/// 活动广场列表
|
||||
+ (void)usereventSquare:(HttpRequestHelperCompletion)complection
|
||||
page:(NSNumber *)page
|
||||
@@ -28,6 +32,49 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
pageSize:(NSNumber *)pageSize
|
||||
uid:(NSString *)uid;
|
||||
|
||||
/// 房间列表
|
||||
+ (void)roomRoleListRoom:(HttpRequestHelperCompletion)complection;
|
||||
|
||||
|
||||
/// <#Description#>
|
||||
/// - Parameters:
|
||||
/// - complection: complete block
|
||||
/// - eventBanner: 活动图片
|
||||
/// - eventDetail: 活动描述内容
|
||||
/// - eventDuration: 活动时长
|
||||
/// - eventStartTimeStr: 活动开始时间,格式(yyyy-MM-dd HH:mm:ss)
|
||||
/// - eventTopic: 活动标题
|
||||
/// - noticeFans: 是否通知用户粉丝,0-否,1-是
|
||||
/// - payBanner: 是否上传首页第二Banner0-否,1-是
|
||||
/// - payGoldNum: 上传首页第二Banner付款金币数
|
||||
/// - roomUid: 房间uid
|
||||
/// - uid: 用户uid
|
||||
+ (void)usereventPublish:(HttpRequestHelperCompletion)complection
|
||||
eventBanner:(NSString *)eventBanner
|
||||
eventDetail:(NSString *)eventDetail
|
||||
eventDuration:(NSNumber *)eventDuration
|
||||
eventStartTimeStr:(NSString *)eventStartTimeStr
|
||||
eventTopic:(NSString *)eventTopic
|
||||
noticeFans:(NSNumber *)noticeFans
|
||||
payBanner:(NSNumber *)payBanner
|
||||
payGoldNum:(NSNumber *)payGoldNum
|
||||
roomUid:(NSString *)roomUid
|
||||
uid:(NSString *)uid;
|
||||
|
||||
/// 订阅活动
|
||||
/// - Parameters:
|
||||
/// - complection: complete
|
||||
/// - eventId: 活动 id
|
||||
/// - subStatus: 订阅状态 0-取消订阅,1-订阅
|
||||
/// - uid: uid
|
||||
+ (void)usereventSub:(HttpRequestHelperCompletion)complection
|
||||
eventId:(NSNumber *)eventId
|
||||
subStatus:(NSNumber *)subStatus
|
||||
uid:(NSString *)uid;
|
||||
|
||||
/// 删除活动
|
||||
+ (void)usereventDel:(HttpRequestHelperCompletion)complection eventId:(NSNumber *)eventId;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -9,6 +9,14 @@
|
||||
|
||||
@implementation Api(EventCenter)
|
||||
|
||||
/// 活動配置
|
||||
+ (void)usereventGoldConfig:(HttpRequestHelperCompletion)complection
|
||||
uid:(NSString *)uid{
|
||||
[self makeRequest:@"userevent/goldConfig"
|
||||
method:HttpRequestHelperMethodGET
|
||||
completion:complection, __FUNCTION__, uid, nil];
|
||||
}
|
||||
|
||||
/// 活动广场列表
|
||||
+ (void)usereventSquare:(HttpRequestHelperCompletion)complection
|
||||
page:(NSNumber *)page
|
||||
@@ -38,4 +46,41 @@
|
||||
completion:complection, __FUNCTION__, page, pageSize, uid, nil];
|
||||
}
|
||||
|
||||
/// 房间列表
|
||||
+ (void)roomRoleListRoom:(HttpRequestHelperCompletion)complection {
|
||||
[self makeRequest:@"roomrole/listroom"
|
||||
method:HttpRequestHelperMethodGET
|
||||
completion:complection, __FUNCTION__, nil];
|
||||
}
|
||||
|
||||
+ (void)usereventPublish:(HttpRequestHelperCompletion)complection
|
||||
eventBanner:(NSString *)eventBanner
|
||||
eventDetail:(NSString *)eventDetail
|
||||
eventDuration:(NSNumber *)eventDuration
|
||||
eventStartTimeStr:(NSString *)eventStartTimeStr
|
||||
eventTopic:(NSString *)eventTopic
|
||||
noticeFans:(NSNumber *)noticeFans
|
||||
payBanner:(NSNumber *)payBanner
|
||||
payGoldNum:(NSNumber *)payGoldNum
|
||||
roomUid:(NSString *)roomUid
|
||||
uid:(NSString *)uid {
|
||||
[self makeRequest:@"/userevent/publish"
|
||||
method:HttpRequestHelperMethodPOST
|
||||
completion:complection, __FUNCTION__, eventBanner, eventDetail, eventDuration, eventStartTimeStr, eventTopic, noticeFans, payBanner, payGoldNum, roomUid, uid, nil];
|
||||
}
|
||||
|
||||
+ (void)usereventSub:(HttpRequestHelperCompletion)complection
|
||||
eventId:(NSNumber *)eventId
|
||||
subStatus:(NSNumber *)subStatus
|
||||
uid:(NSString *)uid {
|
||||
[self makeRequest:@"userevent/sub" method:HttpRequestHelperMethodPOST completion:complection,
|
||||
__FUNCTION__, eventId, subStatus, uid, nil];
|
||||
}
|
||||
|
||||
+ (void)usereventDel:(HttpRequestHelperCompletion)complection eventId:(NSNumber *)eventId {
|
||||
[self makeRequest:@"userevent/del"
|
||||
method:HttpRequestHelperMethodPOST
|
||||
completion:complection, __FUNCTION__, eventId, nil];
|
||||
}
|
||||
|
||||
@end
|
||||
|
21
YuMi/Modules/YMNewHome/Model/EventConfigModel.h
Normal file
21
YuMi/Modules/YMNewHome/Model/EventConfigModel.h
Normal file
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// EventConfigModel.h
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2025/5/15.
|
||||
//
|
||||
|
||||
#import "PIBaseModel.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EventConfigModel : PIBaseModel
|
||||
|
||||
@property (nonatomic, assign) NSInteger latestDay;
|
||||
@property (nonatomic, assign) NSInteger earliestBeginHour;
|
||||
@property (nonatomic, assign) NSInteger goldNum;
|
||||
@property (nonatomic, copy) NSArray <NSString *>*durations;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
12
YuMi/Modules/YMNewHome/Model/EventConfigModel.m
Normal file
12
YuMi/Modules/YMNewHome/Model/EventConfigModel.m
Normal file
@@ -0,0 +1,12 @@
|
||||
//
|
||||
// EventConfigModel.m
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2025/5/15.
|
||||
//
|
||||
|
||||
#import "EventConfigModel.h"
|
||||
|
||||
@implementation EventConfigModel
|
||||
|
||||
@end
|
@@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, assign) NSTimeInterval createTime; // 创建时间戳
|
||||
|
||||
@property (nonatomic, copy) NSString *gender;
|
||||
@property (nonatomic, copy) NSString *nick;
|
||||
|
||||
@end
|
||||
|
||||
|
26
YuMi/Modules/YMNewHome/Model/EventRoomModel.h
Normal file
26
YuMi/Modules/YMNewHome/Model/EventRoomModel.h
Normal file
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// EventRoomModel.h
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2025/5/15.
|
||||
//
|
||||
|
||||
#import "PIBaseModel.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EventRoomModel : PIBaseModel
|
||||
@property (nonatomic, copy) NSString *roomName;
|
||||
@property (nonatomic, assign) NSInteger roomUid;
|
||||
@property (nonatomic, assign) NSInteger erbanNo;
|
||||
@property (nonatomic, copy) NSString *avatar;
|
||||
@end
|
||||
|
||||
@interface EventRoomListModel : PIBaseModel
|
||||
|
||||
@property (nonatomic, strong) EventRoomModel *selfRoom;
|
||||
@property (nonatomic, copy) NSArray <EventRoomModel *>*manageRooms;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
25
YuMi/Modules/YMNewHome/Model/EventRoomModel.m
Normal file
25
YuMi/Modules/YMNewHome/Model/EventRoomModel.m
Normal file
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// EventRoomModel.m
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2025/5/15.
|
||||
//
|
||||
|
||||
#import "EventRoomModel.h"
|
||||
|
||||
@implementation EventRoomModel
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@implementation EventRoomListModel
|
||||
|
||||
+ (NSDictionary *)objectClassInArray {
|
||||
return @{
|
||||
@"selfRoom": [EventRoomModel class],
|
||||
@"manageRooms": [EventRoomModel class],
|
||||
};
|
||||
}
|
||||
|
||||
@end
|
@@ -7,34 +7,59 @@
|
||||
|
||||
#import "BaseMvpPresenter.h"
|
||||
#import "EventItemModel.h"
|
||||
#import "EventRoomModel.h"
|
||||
#import "EventConfigModel.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol CreateEventPresenterProcotol <NSObject>
|
||||
@optional
|
||||
|
||||
- (void)loadCongfigSuccess:(EventConfigModel *)model;
|
||||
- (void)loadCongfigFailure:(NSString *)msg;
|
||||
|
||||
- (void)eventSquareListSuccess:(NSArray <EventItemModel *>*)list;
|
||||
- (void)eventSquareListFailure:(NSString *)msg;
|
||||
|
||||
- (void)myCreateEventListSuccess:(NSArray *)list;
|
||||
- (void)myCreateEventListSuccess:(NSArray <EventItemModel *>*)list;
|
||||
- (void)myCreateEventListFailure:(NSString *)msg;
|
||||
|
||||
- (void)mySubEventListSuccess:(NSArray *)list;
|
||||
- (void)mySubEventListSuccess:(NSArray <EventItemModel *>*)list;
|
||||
- (void)mySubEventListFailure:(NSString *)msg;
|
||||
- (void)myEventListFailure:(NSString *)msg;
|
||||
|
||||
- (void)myRoomListSuccess:(EventRoomListModel *)listModel;
|
||||
- (void)myRoomListFailure:(NSString *)msg;
|
||||
|
||||
- (void)createEventSuccess;
|
||||
- (void)createEventFailure:(NSString *)msg;
|
||||
|
||||
- (void)eventSubActionSuccess:(BOOL)isSub eventId:(NSInteger)eventId;
|
||||
- (void)eventSubActionFailure:(NSString *)msg;
|
||||
|
||||
- (void)deleteEventSuccess:(NSInteger)eventId;
|
||||
- (void)deleteEventFailure:(NSString *)msg;
|
||||
|
||||
@end
|
||||
|
||||
@interface CreateEventPresenter : BaseMvpPresenter
|
||||
|
||||
- (void)loadConfig;
|
||||
|
||||
- (void)loadEventSquare:(NSInteger)page;
|
||||
- (void)loadMyCreateEvents:(NSInteger)page;
|
||||
- (void)loadMySubEvents:(NSInteger)page;
|
||||
- (void)loadMyEvents;
|
||||
- (void)loadMyRooms;
|
||||
|
||||
- (void)deleteEvent:(NSInteger)eventId;
|
||||
|
||||
- (void)subEvent:(BOOL)isSub eventId:(NSInteger)eventId;
|
||||
|
||||
- (void)createEventWithTitle:(NSString *)title
|
||||
image:(UIImage *)image
|
||||
uploadToHome:(BOOL)uploadToHome
|
||||
roomId:(NSString *)roomId
|
||||
startTime:(NSDate *)startTime
|
||||
image:(NSString *)imagePath
|
||||
uploadToHome:(BOOL)uploadToHome
|
||||
startTime:(NSString *)startTime
|
||||
duration:(NSInteger)duration
|
||||
content:(NSString *)content
|
||||
notifyFans:(BOOL)notifyFans;
|
||||
|
@@ -8,6 +8,8 @@
|
||||
#import "CreateEventPresenter.h"
|
||||
#import "Api+EventCenter.h"
|
||||
|
||||
#import <ReactiveObjC/ReactiveObjC.h>
|
||||
|
||||
@interface CreateEventPresenter()
|
||||
|
||||
@end
|
||||
@@ -15,6 +17,19 @@
|
||||
@implementation CreateEventPresenter
|
||||
// Maybe 用一个方法 + 枚举指来指代一个功能类型的 api call?
|
||||
|
||||
- (void)loadConfig {
|
||||
[Api usereventGoldConfig:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(loadCongfigSuccess:)]) {
|
||||
[[self getView] loadCongfigSuccess:[EventConfigModel modelWithJSON:data.data]];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(loadCongfigFailure:)]) {
|
||||
[[self getView] loadCongfigFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES]
|
||||
uid:[AccountInfoStorage instance].getUid];
|
||||
}
|
||||
|
||||
- (void)loadEventSquare:(NSInteger)page {
|
||||
[Api usereventSquare:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSquareListSuccess:)]) {
|
||||
@@ -29,11 +44,11 @@
|
||||
|
||||
- (void)loadMyCreateEvents:(NSInteger)page {
|
||||
[Api usereventMySquare:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSquareListSuccess:)]) {
|
||||
[[self getView] myCreateEventListSuccess:@[]];
|
||||
if ([[self getView] respondsToSelector:@selector(myCreateEventListSuccess:)]) {
|
||||
[[self getView] myCreateEventListSuccess:[EventItemModel modelsWithArray:data.data]];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSquareListFailure:)]) {
|
||||
if ([[self getView] respondsToSelector:@selector(myCreateEventListFailure:)]) {
|
||||
[[self getView] myCreateEventListFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES]
|
||||
@@ -44,12 +59,12 @@
|
||||
|
||||
- (void)loadMySubEvents:(NSInteger)page {
|
||||
[Api usereventMySub:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSquareListSuccess:)]) {
|
||||
[[self getView] mySubEventListSuccess:@[]];
|
||||
if ([[self getView] respondsToSelector:@selector(mySubEventListSuccess:)]) {
|
||||
[[self getView] mySubEventListSuccess:[EventItemModel modelsWithArray:data.data]];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSquareListFailure:)]) {
|
||||
[[self getView] myCreateEventListFailure:msg];
|
||||
if ([[self getView] respondsToSelector:@selector(mySubEventListFailure:)]) {
|
||||
[[self getView] mySubEventListFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES]
|
||||
page:@(page)
|
||||
@@ -57,54 +72,123 @@
|
||||
uid:[AccountInfoStorage instance].getUid];
|
||||
}
|
||||
|
||||
- (void)loadMyEvents {
|
||||
RACSubject *create = [RACSubject subject];
|
||||
RACSubject *sub = [RACSubject subject];
|
||||
|
||||
@kWeakify(self);
|
||||
[[RACSignal combineLatest:@[create, sub] reduce:^id(NSArray <EventItemModel *> * creates,
|
||||
NSArray <EventItemModel *> * subs){
|
||||
@kStrongify(self);
|
||||
if ([[self getView] respondsToSelector:@selector(myCreateEventListSuccess:)]) {
|
||||
[[self getView] myCreateEventListSuccess:creates];
|
||||
}
|
||||
if ([[self getView] respondsToSelector:@selector(mySubEventListSuccess:)]) {
|
||||
[[self getView] mySubEventListSuccess:subs];
|
||||
}
|
||||
|
||||
return nil;
|
||||
}] subscribeError:^(NSError * _Nullable error) {
|
||||
@kStrongify(self);
|
||||
[[self getView] myEventListFailure:error.domain];
|
||||
}];
|
||||
|
||||
[Api usereventMySquare:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
NSArray *array = [EventItemModel modelsWithArray:data.data];
|
||||
if (array.count > 4) {
|
||||
array = [array subarrayWithRange:NSMakeRange(0, 4)];
|
||||
}
|
||||
[create sendNext:array];
|
||||
[create sendCompleted];
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
[create sendError:[NSError errorWithDomain:msg code:code userInfo:nil]];
|
||||
[create sendCompleted];
|
||||
} showLoading:YES errorToast:YES]
|
||||
page:@(1)
|
||||
pageSize:@20
|
||||
uid:[AccountInfoStorage instance].getUid];
|
||||
|
||||
[Api usereventMySub:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
NSArray *array = [EventItemModel modelsWithArray:data.data];
|
||||
[sub sendNext:array];
|
||||
[sub sendCompleted];
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
[sub sendError:[NSError errorWithDomain:msg code:code userInfo:nil]];
|
||||
[sub sendCompleted];
|
||||
} showLoading:YES errorToast:YES]
|
||||
page:@(1)
|
||||
pageSize:@20
|
||||
uid:[AccountInfoStorage instance].getUid];
|
||||
|
||||
}
|
||||
|
||||
- (void)loadMyRooms {
|
||||
[Api roomRoleListRoom:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(myRoomListSuccess:)]) {
|
||||
[[self getView] myRoomListSuccess:[EventRoomListModel modelWithJSON:data.data]];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(myRoomListFailure:)]) {
|
||||
[[self getView] myRoomListFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES]];
|
||||
}
|
||||
|
||||
- (void)deleteEvent:(NSInteger)eventId {
|
||||
[Api usereventDel:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(deleteEventSuccess:)]) {
|
||||
[[self getView] deleteEventSuccess:eventId];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(deleteEventFailure:)]) {
|
||||
[[self getView] deleteEventFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES] eventId:@(eventId)];
|
||||
}
|
||||
|
||||
- (void)subEvent:(BOOL)isSub
|
||||
eventId:(NSInteger)eventId {
|
||||
[Api usereventSub:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSubActionSuccess: eventId:)]) {
|
||||
[[self getView] eventSubActionSuccess:isSub eventId:eventId];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(eventSubActionFailure:)]) {
|
||||
[[self getView] eventSubActionFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES]
|
||||
eventId:@(eventId)
|
||||
subStatus:isSub ? @(1) : @(0)
|
||||
uid:[AccountInfoStorage instance].getUid];
|
||||
}
|
||||
|
||||
- (void)createEventWithTitle:(NSString *)title
|
||||
image:(UIImage *)image
|
||||
image:(NSString *)imagePath
|
||||
uploadToHome:(BOOL)uploadToHome
|
||||
roomId:(NSString *)roomId
|
||||
startTime:(NSDate *)startTime
|
||||
startTime:(NSString *)startTime
|
||||
duration:(NSInteger)duration
|
||||
content:(NSString *)content
|
||||
notifyFans:(BOOL)notifyFans {
|
||||
// 输入验证
|
||||
if (title.length == 0) {
|
||||
// [[self getView] showError:@"请输入活动标题"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (!image) {
|
||||
// [[self getView] showError:@"请选择活动横幅图片"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (roomId.length == 0) {
|
||||
// [[self getView] showError:@"请选择房间"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (!startTime) {
|
||||
// [[self getView] showError:@"请选择开始时间"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (duration <= 0) {
|
||||
// [[self getView] showError:@"请选择活动时长"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (content.length == 0) {
|
||||
// [[self getView] 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 getView] showCreateSuccess];
|
||||
});
|
||||
[Api usereventPublish:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||
if ([[self getView] respondsToSelector:@selector(createEventSuccess)]) {
|
||||
[[self getView] createEventSuccess];
|
||||
}
|
||||
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||
if ([[self getView] respondsToSelector:@selector(createEventFailure:)]) {
|
||||
[[self getView] createEventFailure:msg];
|
||||
}
|
||||
} showLoading:YES errorToast:YES]
|
||||
eventBanner:imagePath
|
||||
eventDetail:content
|
||||
eventDuration:@(duration)
|
||||
eventStartTimeStr:startTime
|
||||
eventTopic:title
|
||||
noticeFans:@(notifyFans)
|
||||
payBanner:@(uploadToHome)
|
||||
payGoldNum:@(1000) // TODO: load gold from config
|
||||
roomUid:[AccountInfoStorage instance].getUid
|
||||
uid:[AccountInfoStorage instance].getUid];
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -3,7 +3,9 @@
|
||||
@interface EventCenterEmptyCell : UITableViewCell
|
||||
|
||||
+ (CGFloat)cellHeight;
|
||||
+ (void)registerTo:(UITableView *)tableView;
|
||||
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||
|
||||
+ (void)registerTo:(UITableView *)tableView withCustomID:(NSString *)cid;
|
||||
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView
|
||||
customID:(NSString *)cid
|
||||
atIndexPath:(NSIndexPath *)indexPath;
|
||||
- (void)updateTitle:(NSString *)title;
|
||||
@end
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
@implementation EventCenterEmptyCell
|
||||
{
|
||||
NSString *cid;
|
||||
UILabel *titleLabel;
|
||||
UIImageView *ufoImageView;
|
||||
}
|
||||
@@ -10,13 +11,21 @@
|
||||
return 170;
|
||||
}
|
||||
|
||||
+ (void)registerTo:(UITableView *)tableView {
|
||||
+ (void)registerTo:(UITableView *)tableView withCustomID:(NSString *)cid{
|
||||
if ([NSString isEmpty:cid]) {
|
||||
cid = NSStringFromClass([self class]);
|
||||
}
|
||||
[tableView registerClass:[self class]
|
||||
forCellReuseIdentifier:NSStringFromClass([self class])];
|
||||
forCellReuseIdentifier:cid];
|
||||
}
|
||||
|
||||
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
|
||||
return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class]) forIndexPath:indexPath];
|
||||
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView
|
||||
customID:(NSString *)cid
|
||||
atIndexPath:(NSIndexPath *)indexPath; {
|
||||
if ([NSString isEmpty:cid]) {
|
||||
cid = NSStringFromClass([self class]);
|
||||
}
|
||||
return [tableView dequeueReusableCellWithIdentifier:cid forIndexPath:indexPath];
|
||||
}
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
@@ -45,4 +54,8 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)updateTitle:(NSString *)title {
|
||||
titleLabel.text = title;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -6,12 +6,21 @@
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "EventItemModel.h"
|
||||
@class EventItemModel;
|
||||
|
||||
typedef enum : NSUInteger {
|
||||
EventCellAction_participate,
|
||||
EventCellAction_sub,
|
||||
EventCellAction_unsub,
|
||||
EventCellAction_delete
|
||||
} EventCellActions;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EventCenterEventCell : UITableViewCell
|
||||
|
||||
@property (nonatomic, copy) void(^statusButtonDidTap)(EventItemModel *model, EventCellActions action);
|
||||
|
||||
+ (CGFloat)cellHeight;
|
||||
+ (void)registerTo:(UITableView *)tableView;
|
||||
+ (EventCenterEventCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||
|
@@ -6,7 +6,7 @@
|
||||
//
|
||||
|
||||
#import "EventCenterEventCell.h"
|
||||
|
||||
#import "EventItemModel.h"
|
||||
@interface EventCenterEventCell()
|
||||
|
||||
@property (nonatomic, strong) EventItemModel *model;
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
@property (nonatomic, strong) UIButton *statusButton;
|
||||
|
||||
@property (nonatomic, assign) EventCellActions action;
|
||||
|
||||
@end
|
||||
|
||||
@implementation EventCenterEventCell
|
||||
@@ -129,6 +131,14 @@
|
||||
make.trailing.mas_equalTo(self.subLabel.mas_leading).offset(-1);
|
||||
make.size.mas_equalTo(CGSizeMake(14, 14));
|
||||
}];
|
||||
|
||||
[self.contentView addSubview:self.statusButton];
|
||||
[self.statusButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(self.avatarImageView);
|
||||
make.trailing.mas_equalTo(self.bgImageView).offset(-13);
|
||||
make.height.mas_equalTo(26);
|
||||
make.width.mas_greaterThanOrEqualTo(26);
|
||||
}];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -137,11 +147,117 @@
|
||||
_model = model;
|
||||
self.bgImageView.imageUrl = model.eventBanner;
|
||||
self.avatarImageView.imageUrl = model.roomAvatar;
|
||||
self.nameLabel.text = @"123";
|
||||
self.nameLabel.text = model.nick;
|
||||
self.idLabel.text = [NSString stringWithFormat:@"ID:%@", @(model.roomErbanNo)];
|
||||
self.eventDescLabel.text = model.eventTopic;
|
||||
self.timeLabel.text = @(model.eventStartTime).stringValue;
|
||||
self.subLabel.text = @(model.subNum).stringValue;
|
||||
|
||||
BOOL needUpdateStatus = YES;
|
||||
if (model.uid == [AccountInfoStorage instance].getUid.integerValue) {
|
||||
switch (model.eventStatus) {
|
||||
case 0:
|
||||
case 2:
|
||||
case 4:
|
||||
needUpdateStatus = NO;
|
||||
[self statusButtonUpdateToDelete];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch (model.liveStatus) {
|
||||
case 1:
|
||||
{
|
||||
if (needUpdateStatus) {
|
||||
if (model.subStatus) {
|
||||
[self statusButtonUpdateToUnSub];
|
||||
} else {
|
||||
[self statusButtonUpdateToSub];
|
||||
}
|
||||
}
|
||||
|
||||
self.timeLabel.text = [NSString stringWithFormat:@"%@:%@",
|
||||
YMLocalizedString(@"20.20.59_text_15"),
|
||||
model.eventStartTimeStr];
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (needUpdateStatus) {
|
||||
[self statusButtonUpdateToPatricipate];
|
||||
}
|
||||
|
||||
self.timeLabel.text = YMLocalizedString(@"20.20.59_text_24");
|
||||
break;
|
||||
case 3:
|
||||
if (needUpdateStatus) {
|
||||
if (model.subStatus) {
|
||||
[self statusButtonUpdateToUnSub];
|
||||
} else {
|
||||
[self statusButtonUpdateToSub];
|
||||
}
|
||||
}
|
||||
|
||||
self.timeLabel.text = YMLocalizedString(@"20.20.59_text_25");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)statusButtonUpdateToSub {
|
||||
self.action = EventCellAction_sub;
|
||||
[self.statusButton setImage:kImage(@"event_ring_sub") forState:UIControlStateNormal];
|
||||
[self.statusButton setTitle:YMLocalizedString(@"20.20.59_text_5") forState:UIControlStateNormal];
|
||||
|
||||
// 恢复默认insets
|
||||
[self resetStatusButtonInsets];
|
||||
}
|
||||
|
||||
- (void)statusButtonUpdateToUnSub {
|
||||
self.action = EventCellAction_unsub;
|
||||
[self.statusButton setImage:kImage(@"event_ring_unsub") forState:UIControlStateNormal];
|
||||
[self.statusButton setTitle:YMLocalizedString(@"20.20.59_text_6") forState:UIControlStateNormal];
|
||||
|
||||
// 恢复默认insets
|
||||
[self resetStatusButtonInsets];
|
||||
}
|
||||
|
||||
- (void)statusButtonUpdateToPatricipate {
|
||||
self.action = EventCellAction_participate;
|
||||
[self.statusButton setImage:kImage(@"room_icon") forState:UIControlStateNormal];
|
||||
[self.statusButton setTitle:YMLocalizedString(@"20.20.59_text_7") forState:UIControlStateNormal];
|
||||
|
||||
// 恢复默认insets
|
||||
[self resetStatusButtonInsets];
|
||||
}
|
||||
|
||||
- (void)statusButtonUpdateToDelete {
|
||||
self.action = EventCellAction_delete;
|
||||
[self.statusButton setImage:kImage(@"event_delete") forState:UIControlStateNormal];
|
||||
[self.statusButton setTitle:@"" forState:UIControlStateNormal];
|
||||
|
||||
// 重置insets,解决图片压缩问题
|
||||
self.statusButton.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
|
||||
self.statusButton.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
|
||||
self.statusButton.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
// 添加重置按钮内边距的方法
|
||||
- (void)resetStatusButtonInsets {
|
||||
CGFloat imageTitleSpacing = 4.0;
|
||||
self.statusButton.contentEdgeInsets = UIEdgeInsetsMake(0, 8, 0, 8);
|
||||
self.statusButton.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, imageTitleSpacing);
|
||||
self.statusButton.titleEdgeInsets = UIEdgeInsetsMake(0, -imageTitleSpacing, 0, 0);
|
||||
}
|
||||
|
||||
- (void)didTapStatusButton {
|
||||
if (self.statusButtonDidTap) {
|
||||
self.statusButtonDidTap(self.model, self.action);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
@@ -238,7 +354,24 @@
|
||||
- (UIView *)blackMask {
|
||||
UIView *v = [[UIView alloc] init];
|
||||
v.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];
|
||||
[v setCornerRadius:8];
|
||||
return v;
|
||||
}
|
||||
|
||||
- (UIButton *)statusButton {
|
||||
if (!_statusButton) {
|
||||
_statusButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_statusButton addTarget:self
|
||||
action:@selector(didTapStatusButton)
|
||||
forControlEvents:UIControlEventTouchUpInside];
|
||||
[_statusButton setCornerRadius:13];
|
||||
[_statusButton setBackgroundColor:[UIColor whiteColor]];
|
||||
[_statusButton.titleLabel setFont:kFontMedium(13)];
|
||||
[_statusButton setTitleColor:UIColorFromRGB(0x313131) forState:UIControlStateNormal];
|
||||
|
||||
// 将边距设置移到resetStatusButtonInsets方法中,初始化时不设置
|
||||
// contentEdgeInsets、imageEdgeInsets和titleEdgeInsets会在对应的状态更新方法中设置
|
||||
}
|
||||
return _statusButton;
|
||||
}
|
||||
@end
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#import "UIKit/UIKit.h"
|
||||
|
||||
@class EventConfigModel;
|
||||
typedef NS_ENUM(NSInteger, CreateEventPickerType) {
|
||||
CreateEventPickerTypeDuration = 0,
|
||||
CreateEventPickerTypeStartTime = 1
|
||||
@@ -8,5 +8,10 @@ typedef NS_ENUM(NSInteger, CreateEventPickerType) {
|
||||
@interface CreateEventPickerContainerView : UIView <UIGestureRecognizerDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
|
||||
@property (nonatomic, assign) CreateEventPickerType pickerType;
|
||||
@property (nonatomic, copy) void (^onConfirmDate)(NSDate *date, NSString *resultString);
|
||||
- (void)showInView:(UIView *)parentView initialDate:(NSDate *)date pickerType:(CreateEventPickerType)type onConfirm:(void (^)(NSDate *date, NSString *resultString))onConfirm;
|
||||
|
||||
- (void)showInView:(UIView *)parentView
|
||||
initialDate:(NSDate *)date
|
||||
config:(EventConfigModel *)config
|
||||
pickerType:(CreateEventPickerType)type
|
||||
onConfirm:(void (^)(NSDate *date, NSString *resultString))onConfirm;
|
||||
@end
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#import "CreateEventPickerContainerView.h"
|
||||
|
||||
#import "EventConfigModel.h"
|
||||
@interface CreateEventPickerContainerView () <UIGestureRecognizerDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
|
||||
@property (nonatomic, strong) EventConfigModel *configModel;
|
||||
@property (nonatomic, strong) UIPickerView *pickerView;
|
||||
@property (nonatomic, strong) NSDate *minDate;
|
||||
@property (nonatomic, strong) NSDate *maxDate;
|
||||
@@ -47,7 +48,7 @@
|
||||
// OK 按钮
|
||||
_okButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
||||
[_okButton setTitle:@"OK" forState:UIControlStateNormal];
|
||||
[_okButton setTitleColor:UIColorFromRGB(0xe29030) forState:UIControlStateNormal];
|
||||
[_okButton setTitleColor:UIColorFromRGB(0xff8c03) forState:UIControlStateNormal];
|
||||
_okButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
|
||||
[_okButton addTarget:self action:@selector(okTapped) forControlEvents:UIControlEventTouchUpInside];
|
||||
[_pickerBg addSubview:_okButton];
|
||||
@@ -66,11 +67,11 @@
|
||||
// 布局
|
||||
[_pickerBg mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.bottom.equalTo(self);
|
||||
make.height.mas_equalTo(300);
|
||||
make.height.mas_equalTo(320);
|
||||
}];
|
||||
|
||||
[_titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(_pickerBg).offset(16);
|
||||
make.top.equalTo(_pickerBg).offset(8);
|
||||
make.centerX.equalTo(_pickerBg);
|
||||
}];
|
||||
|
||||
@@ -94,52 +95,101 @@
|
||||
}
|
||||
|
||||
#pragma mark - Public Methods
|
||||
- (NSDictionary *)formatTimeWithString:(NSString *)minutesString {
|
||||
// 将字符串转换为整数
|
||||
NSInteger minutes = [minutesString integerValue];
|
||||
|
||||
NSMutableDictionary *result = [NSMutableDictionary dictionary];
|
||||
|
||||
if (minutes < 60) {
|
||||
// 小于60分钟,直接显示分钟
|
||||
result[@"title"] = [NSString stringWithFormat:@"%@分钟", minutesString];
|
||||
result[@"minutes"] = minutesString;
|
||||
} else if (minutes < 1440) {
|
||||
// 大于等于60分钟且小于24小时(1440分钟)
|
||||
double hours = minutes / 60.0;
|
||||
if (fmod(hours, 1) == 0) {
|
||||
// 如果能整除,不显示小数点
|
||||
result[@"title"] = [NSString stringWithFormat:@"%ld小时", (long)hours];
|
||||
} else {
|
||||
// 如果不能整除,保留一位小数
|
||||
result[@"title"] = [NSString stringWithFormat:@"%.1f小时", hours];
|
||||
}
|
||||
result[@"minutes"] = minutesString;
|
||||
} else {
|
||||
// 大于等于24小时
|
||||
double days = minutes / 1440.0;
|
||||
if (fmod(days, 1) == 0) {
|
||||
// 如果能整除,不显示小数点
|
||||
result[@"title"] = [NSString stringWithFormat:@"%ld天", (long)days];
|
||||
} else {
|
||||
// 如果不能整除,保留一位小数
|
||||
result[@"title"] = [NSString stringWithFormat:@"%.1f天", days];
|
||||
}
|
||||
result[@"minutes"] = minutesString;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (void)buildDurationDataSource {
|
||||
self.durationsOptions = @[
|
||||
@{@"title": @"30分钟", @"minutes": @30},
|
||||
@{@"title": @"1小时", @"minutes": @60},
|
||||
@{@"title": @"2小时", @"minutes": @120},
|
||||
@{@"title": @"3小时", @"minutes": @180},
|
||||
@{@"title": @"4小时", @"minutes": @240},
|
||||
@{@"title": @"6小时", @"minutes": @360},
|
||||
@{@"title": @"12小时", @"minutes": @720},
|
||||
@{@"title": @"1天", @"minutes": @1440},
|
||||
@{@"title": @"2天", @"minutes": @2880},
|
||||
@{@"title": @"3天", @"minutes": @4320}
|
||||
];
|
||||
NSMutableArray *arr = [NSMutableArray array];
|
||||
for (NSString *duration in self.configModel.durations) {
|
||||
[arr addObject:[self formatTimeWithString:duration]];
|
||||
}
|
||||
self.durationsOptions = arr.copy;
|
||||
}
|
||||
|
||||
- (void)buildStartTimeSourceWithInitialDate:(NSDate *)date {
|
||||
NSCalendar *calendar = [NSCalendar currentCalendar];
|
||||
NSDate *now = [NSDate date];
|
||||
NSDate *start = [calendar dateByAddingUnit:NSCalendarUnitHour value:1 toDate:now options:0];
|
||||
NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth fromDate:start];
|
||||
|
||||
// 最早:当前时间+24小时
|
||||
NSDate *start = [calendar dateByAddingUnit:NSCalendarUnitHour
|
||||
value:24
|
||||
toDate:now
|
||||
options:0];
|
||||
|
||||
// 最晚:当前时间+1个月
|
||||
NSDateComponents *comp = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:now];
|
||||
comp.month += 1;
|
||||
NSDate *end = [calendar dateFromComponents:comp];
|
||||
|
||||
self.minDate = start;
|
||||
self.maxDate = end;
|
||||
|
||||
NSMutableArray *months = [NSMutableArray array];
|
||||
NSMutableArray *days = [NSMutableArray array];
|
||||
NSMutableArray *hours = [NSMutableArray array];
|
||||
|
||||
NSDate *iter = start;
|
||||
while ([iter compare:end] == NSOrderedAscending) {
|
||||
while ([iter compare:end] != NSOrderedDescending) {
|
||||
NSDateComponents *c = [calendar components:NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:iter];
|
||||
|
||||
NSString *monthStr = [NSString stringWithFormat:@"%02ld", (long)c.month];
|
||||
NSString *dayStr = [NSString stringWithFormat:@"%02ld", (long)c.day];
|
||||
NSString *hourStr = [NSString stringWithFormat:@"%02ld:00", (long)c.hour];
|
||||
|
||||
if (![months containsObject:monthStr]) [months addObject:monthStr];
|
||||
if (![days containsObject:dayStr]) [days addObject:dayStr];
|
||||
if (![hours containsObject:hourStr]) [hours addObject:hourStr];
|
||||
|
||||
iter = [calendar dateByAddingUnit:NSCalendarUnitHour value:1 toDate:iter options:0];
|
||||
}
|
||||
|
||||
self.monthArray = months;
|
||||
self.dayArray = days;
|
||||
self.hourArray = hours;
|
||||
self.selectedDate = start;
|
||||
}
|
||||
|
||||
- (void)showInView:(UIView *)parentView initialDate:(NSDate *)date pickerType:(CreateEventPickerType)type onConfirm:(void (^)(NSDate *date, NSString *resultString))onConfirm{
|
||||
- (void)showInView:(UIView *)parentView
|
||||
initialDate:(NSDate *)date
|
||||
config:(EventConfigModel *)config
|
||||
pickerType:(CreateEventPickerType)type
|
||||
onConfirm:(void (^)(NSDate *date, NSString *resultString))onConfirm{
|
||||
self.pickerType = type;
|
||||
self.configModel = config;
|
||||
self.onConfirmDate = onConfirm;
|
||||
if (type == CreateEventPickerTypeStartTime) {
|
||||
[self buildStartTimeSourceWithInitialDate:date];
|
||||
@@ -222,7 +272,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {
|
||||
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
|
||||
NSInteger selectedRow = [pickerView selectedRowInComponent:component];
|
||||
BOOL isSelectedRow = selectedRow == row;
|
||||
NSString *content = @"";
|
||||
@@ -240,12 +290,48 @@
|
||||
break;
|
||||
}
|
||||
|
||||
return [[NSAttributedString alloc] initWithString:content attributes:@{
|
||||
NSFontAttributeName: isSelectedRow ? kFontMedium(15) : kFontRegular(14),
|
||||
NSForegroundColorAttributeName: isSelectedRow ? UIColorFromRGB(0x313131) : UIColorFromRGB(0x7b7b7d)
|
||||
}];
|
||||
UILabel *label = (UILabel *)view;
|
||||
if (!label) {
|
||||
label = [[UILabel alloc] init];
|
||||
label.textAlignment = NSTextAlignmentCenter;
|
||||
label.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
|
||||
label.text = content;
|
||||
label.font = isSelectedRow ? kFontMedium(15) : kFontRegular(12);
|
||||
label.textColor = isSelectedRow ? UIColorFromRGB(0x313131) : UIColorFromRGB(0x7b7b7d);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
|
||||
return 30; // 设置行高
|
||||
}
|
||||
|
||||
//- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {
|
||||
// NSInteger selectedRow = [pickerView selectedRowInComponent:component];
|
||||
// BOOL isSelectedRow = selectedRow == row;
|
||||
// NSString *content = @"";
|
||||
// switch (self.pickerType) {
|
||||
// case CreateEventPickerTypeStartTime: {
|
||||
// if (component == 0) content = self.monthArray[row];
|
||||
// if (component == 1) content = self.dayArray[row];
|
||||
// if (component == 2) content = self.hourArray[row];
|
||||
// }
|
||||
// break;
|
||||
// case CreateEventPickerTypeDuration:
|
||||
// content = self.durationsOptions[row][@"title"];
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// return [[NSAttributedString alloc] initWithString:content attributes:@{
|
||||
// NSFontAttributeName: isSelectedRow ? kFontMedium(12) : kFontRegular(12),
|
||||
// NSForegroundColorAttributeName: isSelectedRow ? UIColorFromRGB(0x313131) : UIColorFromRGB(0x7b7b7d)
|
||||
// }];
|
||||
//}
|
||||
|
||||
//- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
|
||||
// __block UILabel *label = (UILabel *)view;
|
||||
//// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
@@ -291,7 +377,7 @@
|
||||
switch (self.pickerType) {
|
||||
case CreateEventPickerTypeStartTime: {
|
||||
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
|
||||
formatter.dateFormat = @"yyyy-MM-dd-HH:mm";
|
||||
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
|
||||
resultString = [formatter stringFromDate:self.selectedDate];
|
||||
}
|
||||
break;
|
||||
|
@@ -6,11 +6,13 @@
|
||||
//
|
||||
|
||||
#import "MvpViewController.h"
|
||||
|
||||
@class EventRoomModel;
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface CreateEventSelectRoomViewController : MvpViewController
|
||||
|
||||
@property (nonatomic, copy) void(^didSelectedRoom)(EventRoomModel *roomModel);
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -8,57 +8,6 @@
|
||||
#import "CreateEventSelectRoomViewController.h"
|
||||
#import "CreateEventPresenter.h"
|
||||
#import "EventCenterEmptyCell.h"
|
||||
@interface CreateEventSelectRoomEmptyCell : UITableViewCell
|
||||
|
||||
+ (CGFloat)cellHeight;
|
||||
+ (void)registerTo:(UITableView *)tableView;
|
||||
+ (CreateEventSelectRoomEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||
|
||||
@end
|
||||
|
||||
@implementation CreateEventSelectRoomEmptyCell
|
||||
{
|
||||
UILabel *titleLabel;
|
||||
UIImageView *ufoImageView;
|
||||
}
|
||||
|
||||
+ (CGFloat)cellHeight {
|
||||
return 170;
|
||||
}
|
||||
|
||||
+ (void)registerTo:(UITableView *)tableView {
|
||||
[tableView registerClass:[self class]
|
||||
forCellReuseIdentifier:NSStringFromClass([self class])];
|
||||
}
|
||||
|
||||
+ (CreateEventSelectRoomEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
|
||||
return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class]) forIndexPath:indexPath];
|
||||
}
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||
titleLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.59_text_19")
|
||||
font:kFontRegular(14)
|
||||
textColor:UIColorFromRGB(0xafb1b3)];
|
||||
ufoImageView = [[UIImageView alloc] initWithImage:kImage(@"common_empty_UFO")];
|
||||
[self.contentView addSubview:ufoImageView];
|
||||
[self.contentView addSubview:titleLabel];
|
||||
[ufoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.contentView);
|
||||
make.top.mas_equalTo(16);
|
||||
make.size.mas_equalTo(CGSizeMake(110, 110));
|
||||
}];
|
||||
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.contentView);
|
||||
make.top.mas_equalTo(ufoImageView.mas_bottom).offset(16);
|
||||
make.height.mas_equalTo(20);
|
||||
}];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@interface CreateEventSelectRoomCell : UITableViewCell
|
||||
{
|
||||
@@ -71,12 +20,16 @@
|
||||
+ (void)registerTo:(UITableView *)tableView;
|
||||
+ (CreateEventSelectRoomCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||
|
||||
- (void)updateCell:(EventRoomModel *)model;
|
||||
|
||||
@end
|
||||
|
||||
@implementation CreateEventSelectRoomCell
|
||||
|
||||
{
|
||||
EventRoomModel *cellModel;
|
||||
}
|
||||
+ (CGFloat)cellHeight {
|
||||
return 78;
|
||||
return 64;
|
||||
}
|
||||
|
||||
+ (void)registerTo:(UITableView *)tableView {
|
||||
@@ -90,6 +43,11 @@
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
self.separatorInset = UIEdgeInsetsZero;
|
||||
self.contentView.backgroundColor = [UIColor whiteColor];
|
||||
|
||||
NetImageConfig * config = [[NetImageConfig alloc] init];
|
||||
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
|
||||
config.imageType = ImageTypeUserIcon;
|
||||
@@ -111,34 +69,40 @@
|
||||
|
||||
[nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(avatar).offset(4);
|
||||
make.leading.mas_equalTo(avatar).offset(11);
|
||||
make.leading.mas_equalTo(avatar.mas_trailing).offset(11);
|
||||
make.height.mas_equalTo(21);
|
||||
}];
|
||||
|
||||
[idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.mas_equalTo(avatar).offset(-4);
|
||||
make.leading.mas_equalTo(avatar).offset(11);
|
||||
make.leading.mas_equalTo(avatar.mas_trailing).offset(11);
|
||||
make.height.mas_equalTo(18);
|
||||
}];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)updateCell:(EventRoomModel *)model {
|
||||
cellModel = model;
|
||||
avatar.imageUrl = model.avatar;
|
||||
nameLabel.text = model.roomName;
|
||||
idLabel.text = [NSString stringWithFormat:@"ID:%@", @(model.erbanNo)];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface CreateEventSelectRoomViewController () <UITableViewDelegate, UITableViewDataSource>
|
||||
@interface CreateEventSelectRoomViewController () <UITableViewDelegate, UITableViewDataSource, CreateEventPresenterProcotol>
|
||||
{
|
||||
UITableView *tableView;
|
||||
}
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray *myRooms;
|
||||
@property (nonatomic, strong) NSMutableArray *adminRooms;
|
||||
@property (nonatomic, strong) EventRoomListModel *model;
|
||||
|
||||
@end
|
||||
|
||||
@implementation CreateEventSelectRoomViewController
|
||||
|
||||
- (__kindof id)presenter {
|
||||
- (CreateEventPresenter *)createPresenter {
|
||||
return [CreateEventPresenter new];
|
||||
}
|
||||
|
||||
@@ -146,10 +110,10 @@
|
||||
[super viewDidLoad];
|
||||
|
||||
self.title = YMLocalizedString(@"20.20.59_text_14");
|
||||
self.myRooms = [NSMutableArray array];
|
||||
self.adminRooms = [NSMutableArray array];
|
||||
|
||||
[self setupUI];
|
||||
|
||||
[self.presenter loadMyRooms];
|
||||
}
|
||||
|
||||
- (void)setupUI {
|
||||
@@ -158,12 +122,22 @@
|
||||
tableView.dataSource = self;
|
||||
tableView.separatorInset = UIEdgeInsetsZero;
|
||||
tableView.backgroundColor = [UIColor whiteColor];
|
||||
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||
[CreateEventSelectRoomCell registerTo:tableView];
|
||||
// [CreateEventSelectRoomEmptyCell registerTo:tableView];
|
||||
[EventCenterEmptyCell registerTo:tableView];
|
||||
[EventCenterEmptyCell registerTo:tableView withCustomID:@""];
|
||||
[self.view addSubview:tableView];
|
||||
}
|
||||
|
||||
#pragma mark - CreateEventPresenterProcotol
|
||||
- (void)myRoomListSuccess:(EventRoomListModel *)listModel {
|
||||
_model = listModel;
|
||||
[tableView reloadData];
|
||||
}
|
||||
|
||||
- (void)myRoomListFailure:(NSString *)msg {
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - Delegate & DataSource
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
return 2;
|
||||
@@ -172,10 +146,10 @@
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
switch (section) {
|
||||
case 0:
|
||||
return self.myRooms.count == 0 ? 1 : self.myRooms.count;
|
||||
return 1;
|
||||
break;
|
||||
case 1:
|
||||
return self.adminRooms.count == 0 ? 1 : self.adminRooms.count;
|
||||
return self.model.manageRooms.count == 0 ? 1 : self.model.manageRooms.count;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
@@ -206,11 +180,11 @@
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
switch (indexPath.section) {
|
||||
case 0: {
|
||||
return self.myRooms.count == 0 ? [CreateEventSelectRoomEmptyCell cellHeight] : [CreateEventSelectRoomCell cellHeight];
|
||||
return self.model.selfRoom == nil ? [EventCenterEmptyCell cellHeight] : [CreateEventSelectRoomCell cellHeight]-10;
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
return self.adminRooms.count == 0 ? [CreateEventSelectRoomEmptyCell cellHeight] : [CreateEventSelectRoomCell cellHeight];
|
||||
return self.model.manageRooms.count == 0 ? [EventCenterEmptyCell cellHeight] : [CreateEventSelectRoomCell cellHeight];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -223,18 +197,20 @@
|
||||
UITableViewCell *cell = [UITableViewCell new];
|
||||
switch (indexPath.section) {
|
||||
case 0: {
|
||||
if (self.myRooms.count == 0) {
|
||||
cell = [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
|
||||
if (self.model.selfRoom == nil) {
|
||||
cell = [EventCenterEmptyCell cellFor:tableView customID:@"" atIndexPath:indexPath];
|
||||
} else {
|
||||
cell = [CreateEventSelectRoomCell cellFor:tableView atIndexPath:indexPath];
|
||||
[(CreateEventSelectRoomCell *)cell updateCell:self.model.selfRoom];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
if (self.adminRooms.count == 0) {
|
||||
cell = [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
|
||||
if (self.model.manageRooms.count == 0) {
|
||||
cell = [EventCenterEmptyCell cellFor:tableView customID:@"" atIndexPath:indexPath];
|
||||
} else {
|
||||
cell = [CreateEventSelectRoomCell cellFor:tableView atIndexPath:indexPath];
|
||||
[(CreateEventSelectRoomCell *)cell updateCell:[self.model.manageRooms xpSafeObjectAtIndex:indexPath.row]];
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -246,10 +222,41 @@
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:NO];
|
||||
|
||||
if (self.didSelectedRoom) {
|
||||
switch (indexPath.section) {
|
||||
case 0:
|
||||
self.didSelectedRoom(self.model.selfRoom);
|
||||
break;
|
||||
case 1:
|
||||
self.didSelectedRoom([self.model.manageRooms xpSafeObjectAtIndex:indexPath.row]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
- (UIView *)sectionHeaderTitle:(NSString *)title {
|
||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 30)];
|
||||
view.backgroundColor = UIColorFromRGB(0xf2f3f7);
|
||||
|
||||
if ([title isEqualToString:YMLocalizedString(@"20.20.59_text_21")]) {
|
||||
// view.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *label = [UILabel labelInitWithText:title font:kFontSemibold(14) textColor:UIColorFromRGB(0x313131)];
|
||||
[view addSubview:label];
|
||||
[label mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(view);
|
||||
make.leading.mas_equalTo(16);
|
||||
}];
|
||||
return view;
|
||||
}
|
||||
|
||||
UILabel *label = [UILabel labelInitWithText:title font:kFontSemibold(14) textColor:UIColorFromRGB(0x313131)];
|
||||
[view addSubview:label];
|
||||
[label mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
|
@@ -1,22 +0,0 @@
|
||||
//
|
||||
// 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
|
@@ -1,253 +0,0 @@
|
||||
//
|
||||
// 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
|
@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface CreateEventViewControllerV2 : MvpViewController
|
||||
|
||||
@property (nonatomic, copy) void(^createSuccess)();
|
||||
|
||||
@property (nonatomic, strong) UIScrollView *scrollView;
|
||||
@property (nonatomic, strong) UIView *contentView;
|
||||
|
||||
|
@@ -9,112 +9,20 @@
|
||||
|
||||
#import <Masonry/Masonry.h>
|
||||
#import <PhotosUI/PhotosUI.h>
|
||||
#import <TZImagePickerController/TZImagePickerController.h>
|
||||
|
||||
#import "UploadFile.h"
|
||||
#import "CreateEventPresenter.h"
|
||||
#import "CreateEventPickerContainerView.h"
|
||||
#import "CreateEventSelectRoomViewController.h"
|
||||
#import "UIImage+Utils.h"
|
||||
|
||||
#define MAX_EVENT_TITLE_LENGTH 20
|
||||
#define MAX_EVENT_CONTENT_LENGTH 100
|
||||
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIScrollViewDelegate, CreateEventPresenterProcotol, TZImagePickerControllerDelegate>
|
||||
|
||||
//@interface CreateEventPickerContainerView : UIView <UIPickerViewDataSource, UIPickerViewDelegate>
|
||||
//@property (nonatomic, copy) void (^onConfirm)(NSInteger hour, NSInteger min);
|
||||
//@property (nonatomic, assign) NSInteger selectedHour;
|
||||
//@property (nonatomic, assign) NSInteger selectedMin;
|
||||
//@property (nonatomic, strong) UIPickerView *pickerView;
|
||||
//- (void)showInView:(UIView *)parentView initialHour:(NSInteger)hour initialMin:(NSInteger)min;
|
||||
//- (void)dismiss;
|
||||
//@end
|
||||
//
|
||||
//@implementation CreateEventPickerContainerView {
|
||||
// UIView *_pickerBg;
|
||||
// UILabel *_titleLabel;
|
||||
// UIButton *_okButton;
|
||||
//}
|
||||
//- (instancetype)init {
|
||||
// self = [super initWithFrame:CGRectZero];
|
||||
// if (self) {
|
||||
// self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3];
|
||||
// _pickerBg = [[UIView alloc] init];
|
||||
// _pickerBg.backgroundColor = [UIColor whiteColor];
|
||||
// _pickerBg.layer.cornerRadius = 16;
|
||||
// _pickerBg.clipsToBounds = YES;
|
||||
// [self addSubview:_pickerBg];
|
||||
// [_pickerBg mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.left.right.equalTo(self);
|
||||
// make.bottom.equalTo(self.mas_bottom);
|
||||
// make.height.mas_equalTo(300);
|
||||
// }];
|
||||
// _titleLabel = [[UILabel alloc] init];
|
||||
// _titleLabel.text = YMLocalizedString(@"20.20.59_text_16");
|
||||
// _titleLabel.font = kFontMedium(16);
|
||||
// _titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||
// [_pickerBg addSubview:_titleLabel];
|
||||
// [_titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.top.equalTo(_pickerBg.mas_top).offset(16);
|
||||
// make.centerX.equalTo(_pickerBg);
|
||||
// }];
|
||||
// _okButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
// [_okButton setTitle:@"OK" forState:UIControlStateNormal];
|
||||
// [_okButton setTitleColor:UIColorFromRGB(0xe29030) forState:UIControlStateNormal];
|
||||
// _okButton.titleLabel.font = kFontMedium(16);
|
||||
// [_okButton addTarget:self action:@selector(okTapped) forControlEvents:UIControlEventTouchUpInside];
|
||||
// [_pickerBg addSubview:_okButton];
|
||||
// [_okButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.centerY.equalTo(_titleLabel);
|
||||
// make.trailing.equalTo(_pickerBg.mas_trailing).offset(-20);
|
||||
// }];
|
||||
// self.pickerView = [[UIPickerView alloc] init];
|
||||
// self.pickerView.dataSource = self;
|
||||
// self.pickerView.delegate = self;
|
||||
// [_pickerBg addSubview:self.pickerView];
|
||||
// [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.left.right.bottom.equalTo(_pickerBg);
|
||||
// make.top.equalTo(_titleLabel.mas_bottom).offset(8);
|
||||
// }];
|
||||
// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss)];
|
||||
// [self addGestureRecognizer:tap];
|
||||
// tap.cancelsTouchesInView = NO;
|
||||
// }
|
||||
// return self;
|
||||
//}
|
||||
//- (void)showInView:(UIView *)parentView initialHour:(NSInteger)hour initialMin:(NSInteger)min {
|
||||
// self.selectedHour = hour;
|
||||
// self.selectedMin = min;
|
||||
// self.frame = parentView.bounds;
|
||||
// [parentView addSubview:self];
|
||||
// self.alpha = 0;
|
||||
// [self.pickerView selectRow:hour inComponent:0 animated:NO];
|
||||
// [self.pickerView selectRow:min/30 inComponent:1 animated:NO];
|
||||
// [UIView animateWithDuration:0.25 animations:^{
|
||||
// self.alpha = 1;
|
||||
// }];
|
||||
//}
|
||||
//- (void)dismiss {
|
||||
// [UIView animateWithDuration:0.25 animations:^{
|
||||
// self.alpha = 0;
|
||||
// } completion:^(BOOL finished) {
|
||||
// [self removeFromSuperview];
|
||||
// }];
|
||||
//}
|
||||
//- (void)okTapped {
|
||||
// if (self.onConfirm) self.onConfirm(self.selectedHour, self.selectedMin);
|
||||
// [self dismiss];
|
||||
//}
|
||||
//// UIPickerViewDataSource
|
||||
//- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2; }
|
||||
//- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
|
||||
// if (component == 0) return 7;
|
||||
// return 2;
|
||||
//}
|
||||
//// UIPickerViewDelegate
|
||||
|
||||
//- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
|
||||
// if (component == 0) self.selectedHour = row;
|
||||
// else self.selectedMin = row * 30;
|
||||
// [pickerView reloadComponent:component];
|
||||
//}
|
||||
//@end
|
||||
|
||||
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIScrollViewDelegate>
|
||||
@property (nonatomic, strong) EventConfigModel *configModel;
|
||||
@property (nonatomic, strong) EventRoomModel *selectRoomModel;
|
||||
|
||||
@property (nonatomic, strong) UIImage *selectedImage;
|
||||
//@property (nonatomic, strong) UIView *durationPickerContainerView;
|
||||
@@ -127,7 +35,7 @@
|
||||
// 添加私有方法声明
|
||||
- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag;
|
||||
- (void)setupDatePicker; // 新增:设置日期选择器
|
||||
- (void)showDatePicker; // 新增:显示日期选择器
|
||||
|
||||
- (void)hideDatePicker; // 新增:隐藏日期选择器
|
||||
- (void)datePickerDoneTapped; // 新增:日期选择器确定按钮点击事件
|
||||
- (void)datePickerCancelTapped; // 新增:日期选择器取消按钮点击事件
|
||||
@@ -145,14 +53,16 @@ static const CGFloat kHorizontalPadding = 16.0;
|
||||
static const CGFloat kVerticalPadding = 10.0;
|
||||
static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
- (CreateEventPresenter *)createPresenter {
|
||||
return [CreateEventPresenter new];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.view.backgroundColor = [UIColor whiteColor];
|
||||
self.title = @"Create Event";
|
||||
|
||||
[self setupUI];
|
||||
// [self setupDatePicker]; // 新增:调用日期选择器设置方法
|
||||
// [self setupDurationPicker]; // 新增:调用时长选择器设置方法
|
||||
[self updateEventTitleCharCount];
|
||||
[self updateEventContentCharCount];
|
||||
|
||||
@@ -170,6 +80,8 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
// 设置 scrollView delegate
|
||||
self.scrollView.delegate = self;
|
||||
|
||||
[self.presenter loadConfig];
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
@@ -211,7 +123,6 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
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)
|
||||
@@ -243,7 +154,6 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
[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) {
|
||||
@@ -265,6 +175,26 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
[super viewDidLayoutSubviews];
|
||||
}
|
||||
|
||||
#pragma mark - CreateEventPresenterProcotol
|
||||
- (void)loadCongfigSuccess:(EventConfigModel *)model {
|
||||
_configModel = model;
|
||||
self.uploadBannerLabel.text = [NSString stringWithFormat:YMLocalizedString(@"20.20.59_text_11"),
|
||||
@(model.goldNum)];
|
||||
}
|
||||
|
||||
- (void)loadCongfigFailure:(NSString *)msg {
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
- (void)createEventSuccess {
|
||||
[XNDJTDDLoadingTool hideHUD];
|
||||
[self.navigationController popViewControllerAnimated:NO];
|
||||
}
|
||||
|
||||
- (void)createEventFailure:(NSString *)msg {
|
||||
[XNDJTDDLoadingTool hideHUD];
|
||||
}
|
||||
|
||||
#pragma mark - Helper Methods
|
||||
|
||||
- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag {
|
||||
@@ -357,12 +287,20 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
- (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];
|
||||
// 使用TZImagePickerController来选择并裁剪图片
|
||||
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
|
||||
imagePickerVc.allowCrop = YES;
|
||||
|
||||
// 获取eventBannerImageView的实际尺寸比例
|
||||
CGFloat viewWidth = self.view.frame.size.width - (kHorizontalPadding * 2 - 2);
|
||||
CGFloat viewHeight = kGetScaleWidth(118);
|
||||
CGFloat cropWidth = MIN(viewWidth, KScreenWidth);
|
||||
CGFloat cropHeight = (viewHeight / viewWidth) * cropWidth;
|
||||
|
||||
// 设置裁剪框的尺寸
|
||||
imagePickerVc.cropRect = CGRectMake((KScreenWidth-cropWidth)/2, (KScreenHeight - cropHeight) / 2, cropWidth, cropHeight);
|
||||
|
||||
[self presentViewController:imagePickerVc animated:YES completion:nil];
|
||||
} else {
|
||||
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
|
||||
picker.delegate = self;
|
||||
@@ -376,18 +314,24 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
CreateEventSelectRoomViewController *vc = [[CreateEventSelectRoomViewController alloc] init];
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
|
||||
// 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];
|
||||
// [self checkCreateEventButtonState];
|
||||
@kWeakify(self);
|
||||
[vc setDidSelectedRoom:^(EventRoomModel * _Nonnull roomModel) {
|
||||
@kStrongify(self);
|
||||
self.selectRoomModel = roomModel;
|
||||
self.selectRoomPlaceholderLabel.text = roomModel.roomName;
|
||||
self.selectRoomPlaceholderLabel.textColor = [UIColor blackColor];
|
||||
[self checkCreateEventButtonState];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)selectStartTimeTapped {
|
||||
CreateEventPickerContainerView *view = [CreateEventPickerContainerView new];
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[view showInView:self.view initialDate:[NSDate date] pickerType:CreateEventPickerTypeStartTime onConfirm:^(NSDate *date, NSString *resultString) {
|
||||
[view showInView:self.view
|
||||
initialDate:[NSDate date]
|
||||
config:self.configModel
|
||||
pickerType:CreateEventPickerTypeStartTime
|
||||
onConfirm:^(NSDate *date, NSString *resultString) {
|
||||
weakSelf.startTimePlaceholderLabel.text = resultString;
|
||||
[weakSelf checkCreateEventButtonState];
|
||||
}];
|
||||
@@ -396,7 +340,11 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
- (void)selectDurationTapped {
|
||||
CreateEventPickerContainerView *view = [CreateEventPickerContainerView new];
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[view showInView:self.view initialDate:[NSDate date] pickerType:CreateEventPickerTypeDuration onConfirm:^(NSDate *date, NSString *resultString) {
|
||||
[view showInView:self.view
|
||||
initialDate:[NSDate date]
|
||||
config:self.configModel
|
||||
pickerType:CreateEventPickerTypeDuration
|
||||
onConfirm:^(NSDate *date, NSString *resultString) {
|
||||
weakSelf.durationPlaceholderLabel.text = resultString;
|
||||
[weakSelf checkCreateEventButtonState];
|
||||
}];
|
||||
@@ -427,9 +375,40 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
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
|
||||
// TODO: 1. 补充 loading; 2. duration 使用 config 内容;3. start time 使用 picker 内容
|
||||
|
||||
@kWeakify(self);
|
||||
[self uploadCover:bannerImage
|
||||
finish:^(NSString *path) {
|
||||
@kStrongify(self);
|
||||
[self.presenter createEventWithTitle:title
|
||||
image:path
|
||||
uploadToHome:uploadToHomepage
|
||||
startTime:startTime
|
||||
duration:30
|
||||
content:content
|
||||
notifyFans:notifyFans];
|
||||
}];
|
||||
|
||||
}
|
||||
|
||||
- (void)uploadCover:(UIImage *)cover finish:(void(^)(NSString *path))finish {
|
||||
[XNDJTDDLoadingTool showLoading];
|
||||
NSData *data = UIImageJPEGRepresentation(cover, 0.7);
|
||||
NSString *format = [UIImage getImageTypeWithImageData:data];
|
||||
NSString *name = [NSString stringWithFormat:@"banner/%@.%@",[NSString createUUID],format];
|
||||
|
||||
[[UploadFile share]QCloudUploadImage:data named:name success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) {
|
||||
[XNDJTDDLoadingTool hideHUD];
|
||||
if (finish) {
|
||||
finish(key);
|
||||
}
|
||||
} failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) {
|
||||
[XNDJTDDLoadingTool showErrorWithMessage:message];
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - UITextFieldDelegate
|
||||
|
||||
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
|
||||
@@ -470,6 +449,7 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
}
|
||||
|
||||
- (void)uploadBannerButtonTapped:(UIButton *)sender {
|
||||
// TODO: 补充钱包判断
|
||||
if (sender == self.uploadBannerYesButton) {
|
||||
if (!self.uploadBannerYesButton.selected) { // 避免重复设置
|
||||
self.uploadBannerYesButton.selected = YES;
|
||||
@@ -491,9 +471,15 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
|
||||
UIImage *selectedImage = info[UIImagePickerControllerOriginalImage];
|
||||
if (selectedImage) {
|
||||
self.selectedImage = selectedImage;
|
||||
self.eventBannerImageView.image = selectedImage;
|
||||
self.eventBannerCamearImageView.hidden = NO; // Hide placeholder once image is selected
|
||||
// 对于iOS 14以下版本,选择图片后手动裁剪
|
||||
CGFloat viewWidth = self.view.frame.size.width - (kHorizontalPadding * 2 - 2);
|
||||
CGFloat viewHeight = kGetScaleWidth(118);
|
||||
CGSize cropSize = CGSizeMake(viewWidth, viewHeight);
|
||||
|
||||
UIImage *croppedImage = [selectedImage cutImage:cropSize];
|
||||
self.selectedImage = croppedImage;
|
||||
self.eventBannerImageView.image = croppedImage;
|
||||
self.eventBannerCamearImageView.hidden = NO;
|
||||
}
|
||||
[picker dismissViewControllerAnimated:YES completion:nil];
|
||||
[self checkCreateEventButtonState];
|
||||
@@ -507,41 +493,10 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
- (void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)) {
|
||||
[picker dismissViewControllerAnimated:YES completion:nil];
|
||||
if (results.count == 0) {
|
||||
[self checkCreateEventButtonState];
|
||||
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.selectedImage = (UIImage *)object;
|
||||
self.eventBannerImageView.image = (UIImage *)object;
|
||||
self.eventBannerCamearImageView.hidden = NO; // Hide placeholder
|
||||
[self checkCreateEventButtonState];
|
||||
});
|
||||
} else {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self checkCreateEventButtonState];
|
||||
});
|
||||
}
|
||||
}];
|
||||
} else {
|
||||
[self checkCreateEventButtonState];
|
||||
}
|
||||
// 我们使用TZImagePickerController代替了PHPickerViewController,这个方法不再需要
|
||||
[self checkCreateEventButtonState];
|
||||
}
|
||||
|
||||
/*
|
||||
#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 {
|
||||
@@ -591,24 +546,6 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)showDatePicker {
|
||||
CreateEventPickerContainerView *picker = [[CreateEventPickerContainerView alloc] init];
|
||||
[picker showInView:self.view initialDate:[NSDate date] pickerType:CreateEventPickerTypeStartTime onConfirm:^(NSDate *date, NSString *resultString) {
|
||||
|
||||
}];
|
||||
|
||||
|
||||
// if (!_datePickerContainerView) {
|
||||
// [self setupDatePicker];
|
||||
// }
|
||||
// [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;
|
||||
@@ -620,12 +557,10 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
- (void)datePickerDoneTapped {
|
||||
self.selectedStartTime = self.datePicker.date;
|
||||
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; // Customize format as needed
|
||||
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // 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];
|
||||
}
|
||||
@@ -706,8 +641,8 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
|
||||
[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
|
||||
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding-1);
|
||||
make.height.mas_equalTo(kGetScaleWidth(118)); // Adjust height as needed
|
||||
}];
|
||||
[self.eventBannerCamearImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.trailing.equalTo(self.eventBannerImageView);
|
||||
@@ -718,13 +653,15 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
#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.selected = NO;
|
||||
[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.selected = YES;
|
||||
[self.uploadBannerNoButton addTarget:self action:@selector(uploadBannerButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self.contentView addSubview:self.uploadBannerNoButton];
|
||||
|
||||
@@ -852,6 +789,7 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
}
|
||||
|
||||
- (void)checkCreateEventButtonState {
|
||||
|
||||
NSString *placeholder = YMLocalizedString(@"XPAnchorPKTableViewCell2");
|
||||
BOOL hasTitle = self.eventTitleTextField.text.length > 0;
|
||||
BOOL hasBanner = self.selectedImage != nil;
|
||||
@@ -877,6 +815,7 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[self.durationPickerView showInView:self.view
|
||||
initialDate:[NSDate date]
|
||||
config:self.configModel
|
||||
pickerType:CreateEventPickerTypeDuration
|
||||
onConfirm:^(NSDate *date, NSString *resultString) {
|
||||
weakSelf.durationPlaceholderLabel.text = resultString;
|
||||
@@ -919,4 +858,15 @@ static const CGFloat kSectionSpacing = 20.0;
|
||||
[self checkCreateEventButtonState];
|
||||
}
|
||||
|
||||
#pragma mark - TZImagePickerControllerDelegate
|
||||
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray<UIImage *> *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto infos:(NSArray<NSDictionary *> *)infos {
|
||||
if (photos.count > 0) {
|
||||
UIImage *croppedImage = photos.firstObject;
|
||||
self.selectedImage = croppedImage;
|
||||
self.eventBannerImageView.image = croppedImage;
|
||||
self.eventBannerCamearImageView.hidden = NO;
|
||||
[self checkCreateEventButtonState];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -1,7 +0,0 @@
|
||||
@interface EventCenterEmptyCell : UITableViewCell
|
||||
|
||||
+ (CGFloat)cellHeight;
|
||||
+ (void)registerTo:(UITableView *)tableView;
|
||||
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||
|
||||
@end
|
@@ -1,44 +0,0 @@
|
||||
#import "EventCenterEmptyCell.h"
|
||||
|
||||
@implementation EventCenterEmptyCell
|
||||
{
|
||||
UILabel *titleLabel;
|
||||
UIImageView *ufoImageView;
|
||||
}
|
||||
|
||||
+ (CGFloat)cellHeight {
|
||||
return 170;
|
||||
}
|
||||
|
||||
+ (void)registerTo:(UITableView *)tableView {
|
||||
[tableView registerClass:[self class]
|
||||
forCellReuseIdentifier:NSStringFromClass([self class])];
|
||||
}
|
||||
|
||||
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
|
||||
return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class]) forIndexPath:indexPath];
|
||||
}
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||
titleLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.59_text_19")
|
||||
font:kFontRegular(14)
|
||||
textColor:UIColorFromRGB(0xafb1b3)];
|
||||
ufoImageView = [[UIImageView alloc] initWithImage:kImage(@"common_empty_UFO")];
|
||||
[self.contentView addSubview:ufoImageView];
|
||||
[self.contentView addSubview:titleLabel];
|
||||
[ufoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.contentView);
|
||||
make.top.mas_equalTo(16);
|
||||
make.size.mas_equalTo(CGSizeMake(110, 110));
|
||||
}];
|
||||
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.contentView);
|
||||
make.top.mas_equalTo(ufoImageView.mas_bottom).offset(16);
|
||||
make.height.mas_equalTo(20);
|
||||
}];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
@@ -16,6 +16,19 @@
|
||||
#import "EventCenterEventCell.h"
|
||||
#import "XPWebViewController.h"
|
||||
#import "XPRoomViewController.h"
|
||||
#import "MyEventsViewController.h"
|
||||
#import "XPRoomViewController.h"
|
||||
|
||||
static NSString *kOfficialEmptyID = @"official empty";
|
||||
static NSString *kSquareEmptyID = @"square empty";
|
||||
static NSString *kMyEmptyID = @"my empty";
|
||||
|
||||
static UIEdgeInsets kEventTableViewContentInset(void) {
|
||||
return UIEdgeInsetsMake(-10, 0, 100 + kSafeAreaBottomHeight, 0);
|
||||
}
|
||||
static UIEdgeInsets kOfficialTableViewContentInset(void) {
|
||||
return UIEdgeInsetsMake(0, 0, 100 + kSafeAreaBottomHeight, 0);
|
||||
}
|
||||
|
||||
@interface EventCenterViewController () <UIPageViewControllerDataSource, UIPageViewControllerDelegate, UITableViewDelegate, UITableViewDataSource, CreateEventPresenterProcotol>
|
||||
|
||||
@@ -72,7 +85,9 @@
|
||||
make.height.mas_equalTo(44);
|
||||
}];
|
||||
|
||||
NSArray *titles = @[YMLocalizedString(@"20.20.59_text_2"), YMLocalizedString(@"20.20.59_text_3"), YMLocalizedString(@"20.20.59_text_4")];
|
||||
NSArray *titles = @[YMLocalizedString(@"20.20.59_text_2"),
|
||||
YMLocalizedString(@"20.20.59_text_3"),
|
||||
YMLocalizedString(@"20.20.59_text_4")];
|
||||
NSMutableArray *buttons = [NSMutableArray array];
|
||||
CGFloat buttonWidth = UIScreen.mainScreen.bounds.size.width / titles.count;
|
||||
|
||||
@@ -164,8 +179,11 @@
|
||||
#pragma mark - Setup Data
|
||||
- (void)setOfficialEventModels:(NSArray<HomeBannerInfoModel *> *)officialEventModels {
|
||||
_officialDatasource = officialEventModels.mutableCopy;
|
||||
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"activityShow == %@", @(1)];
|
||||
// [_officialDatasource filterUsingPredicate:predicate];
|
||||
#if DEBUG
|
||||
#else
|
||||
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"activityShow == %@", @(1)];
|
||||
[_officialDatasource filterUsingPredicate:predicate];
|
||||
#endif
|
||||
|
||||
// 处理空数据状态
|
||||
if (_officialDatasource.count == 0) {
|
||||
@@ -218,21 +236,118 @@
|
||||
|
||||
// 根据当前选中的tab控制createButton的显示状态
|
||||
self.createButton.hidden = (index == 0);
|
||||
|
||||
// 加载数据逻辑
|
||||
if (index == 1 && self.eventSquareDatasource.count == 0) {
|
||||
[self.presenter loadEventSquare:self.eventSquareTableViewPage];
|
||||
} else if (index == 2 && self.myCreateEventDatasource.count == 0 && self.mySubEventDatasource.count == 0) {
|
||||
[self.presenter loadMyEvents];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)didTapCreateButton {
|
||||
CreateEventViewControllerV2 *createEventVC = [[CreateEventViewControllerV2 alloc] init];
|
||||
[self.navigationController pushViewController:createEventVC animated:YES];
|
||||
|
||||
@kWeakify(self);
|
||||
[createEventVC setCreateSuccess:^{
|
||||
@kStrongify(self);
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
switch (self.currentIndex) {
|
||||
case 1:
|
||||
[self.eventSquareTableView.mj_header beginRefreshing];
|
||||
break;
|
||||
case 2:
|
||||
[self.myEventTableView.mj_header beginRefreshing];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)didTapMyCreateEventSeactionTitle {
|
||||
MyEventsViewController *vc = [[MyEventsViewController alloc] init];
|
||||
[self.navigationController pushViewController:vc
|
||||
animated:YES];
|
||||
}
|
||||
|
||||
- (void)handleCellStatusButtonDidTap:(EventItemModel *)model action:(EventCellActions)action {
|
||||
switch (action) {
|
||||
case EventCellAction_participate:
|
||||
[XPRoomViewController openRoom:@(model.roomUid).stringValue
|
||||
viewController:self];
|
||||
break;
|
||||
case EventCellAction_sub:
|
||||
[self.presenter subEvent:model.subStatus ? NO : YES
|
||||
eventId:model.id];
|
||||
break;
|
||||
case EventCellAction_unsub:
|
||||
[self.presenter subEvent:model.subStatus ? NO : YES
|
||||
eventId:model.id];
|
||||
break;
|
||||
case EventCellAction_delete:
|
||||
[self.presenter deleteEvent:model.id];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
if (tableView == self.myEventTableView) {
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
|
||||
if (tableView == self.myEventTableView) {
|
||||
return 60;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
|
||||
if (tableView == self.myEventTableView) {
|
||||
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 60)];
|
||||
v.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *title = [UILabel labelInitWithText:section == 0 ? YMLocalizedString(@"20.20.59_text_4") : YMLocalizedString(@"20.20.59_text_22")
|
||||
font:kFontSemibold(18)
|
||||
textColor:UIColorFromRGB(0x313131)];
|
||||
[v addSubview:title];
|
||||
[title mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(v);
|
||||
make.leading.mas_equalTo(15);
|
||||
}];
|
||||
|
||||
if (section == 0) {
|
||||
UIImageView *arrow = [[UIImageView alloc] initWithImage:kImage(@"event_arrow_black")];
|
||||
arrow.userInteractionEnabled = YES;
|
||||
[v addSubview:arrow];
|
||||
[arrow mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(v);
|
||||
make.trailing.mas_equalTo(-15);
|
||||
make.size.mas_equalTo(CGSizeMake(22, 22));
|
||||
}];
|
||||
|
||||
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
|
||||
action:@selector(didTapMyCreateEventSeactionTitle)];
|
||||
[arrow addGestureRecognizer:tap];
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
if (tableView == self.officialTableView) {
|
||||
return self.officialDatasource.count > 0 ? self.officialDatasource.count : 1;
|
||||
} else if (tableView == self.eventSquareTableView) {
|
||||
return self.eventSquareDatasource.count > 0 ? self.eventSquareDatasource.count : 1;
|
||||
} else {
|
||||
} else if (tableView == self.myEventTableView) {
|
||||
switch (section) {
|
||||
case 0:
|
||||
return self.myCreateEventDatasource.count > 0 ? self.myCreateEventDatasource.count : 1;
|
||||
@@ -245,35 +360,72 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
@kWeakify(self);
|
||||
if (tableView == self.officialTableView) {
|
||||
if (self.officialDatasource.count == 0) {
|
||||
return [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
|
||||
// EventCenterEmptyCell *cell =
|
||||
return [EventCenterEmptyCell cellFor:tableView customID:kOfficialEmptyID atIndexPath:indexPath];
|
||||
}
|
||||
|
||||
EventCenterOfficialCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
|
||||
if (!cell) {
|
||||
cell = [[EventCenterOfficialCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
|
||||
}
|
||||
cell.cellModel = [self.officialDatasource xpSafeObjectAtIndex:indexPath.row];
|
||||
return cell;
|
||||
} else {
|
||||
if ((tableView == self.eventSquareTableView && self.eventSquareDatasource.count == 0) ||
|
||||
(tableView == self.myEventTableView && self.myCreateEventDatasource.count == 0)) {
|
||||
return [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
|
||||
} else if (tableView == self.eventSquareTableView) {
|
||||
if (self.eventSquareDatasource.count == 0) {
|
||||
return [EventCenterEmptyCell cellFor:tableView customID:kSquareEmptyID atIndexPath:indexPath];
|
||||
}
|
||||
|
||||
EventCenterEventCell *cell = [EventCenterEventCell cellFor:tableView atIndexPath:indexPath];
|
||||
if (tableView == self.eventSquareTableView) {
|
||||
EventItemModel *model = [self.eventSquareDatasource xpSafeObjectAtIndex:indexPath.row];
|
||||
[cell updateCell:model];
|
||||
}
|
||||
if ((tableView == self.eventSquareTableView && self.eventSquareDatasource.count > indexPath.row) ||
|
||||
(tableView == self.myEventTableView && self.myCreateEventDatasource.count > indexPath.row)) {
|
||||
// cell.model = tableView == self.eventSquareTableView ? self.eventSquareDatasource[indexPath.row] : self.myEventDatasource[indexPath.row];
|
||||
}
|
||||
EventItemModel *model = [self.eventSquareDatasource xpSafeObjectAtIndex:indexPath.row];
|
||||
[cell updateCell:model];
|
||||
[cell setStatusButtonDidTap:^(EventItemModel * _Nonnull model, EventCellActions action) {
|
||||
@kStrongify(self);
|
||||
[self handleCellStatusButtonDidTap:model action:action];
|
||||
}];
|
||||
|
||||
return cell;
|
||||
} else if (tableView == self.myEventTableView) {
|
||||
switch (indexPath.section) {
|
||||
case 0: {
|
||||
if (self.myCreateEventDatasource.count == 0) {
|
||||
return [EventCenterEmptyCell cellFor:tableView customID:kMyEmptyID atIndexPath:indexPath];
|
||||
}
|
||||
EventCenterEventCell *cell = [EventCenterEventCell cellFor:tableView atIndexPath:indexPath];
|
||||
EventItemModel *model = [self.myCreateEventDatasource xpSafeObjectAtIndex:indexPath.row];
|
||||
[cell updateCell:model];
|
||||
[cell setStatusButtonDidTap:^(EventItemModel * _Nonnull model, EventCellActions action) {
|
||||
@kStrongify(self);
|
||||
[self handleCellStatusButtonDidTap:model action:action];
|
||||
}];
|
||||
return cell;
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
if (self.mySubEventDatasource.count == 0) {
|
||||
return [EventCenterEmptyCell cellFor:tableView customID:kMyEmptyID atIndexPath:indexPath];
|
||||
}
|
||||
EventCenterEventCell *cell = [EventCenterEventCell cellFor:tableView atIndexPath:indexPath];
|
||||
EventItemModel *model = [self.mySubEventDatasource xpSafeObjectAtIndex:indexPath.row];
|
||||
[cell updateCell:model];
|
||||
[cell setStatusButtonDidTap:^(EventItemModel * _Nonnull model, EventCellActions action) {
|
||||
@kStrongify(self);
|
||||
[self handleCellStatusButtonDidTap:model action:action];
|
||||
}];
|
||||
return cell;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return [UITableViewCell new];
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
@@ -284,16 +436,16 @@
|
||||
}
|
||||
|
||||
if (tableView == self.eventSquareTableView) {
|
||||
return self.eventSquareDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 150;
|
||||
return self.eventSquareDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 140;
|
||||
}
|
||||
|
||||
if (tableView == self.myEventTableView) {
|
||||
switch (indexPath.section) {
|
||||
case 0:
|
||||
return self.myCreateEventDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 150;
|
||||
return self.myCreateEventDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 140;
|
||||
break;
|
||||
case 1:
|
||||
return self.mySubEventDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 150;
|
||||
return self.mySubEventDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 140;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
@@ -339,8 +491,23 @@
|
||||
if (model) {
|
||||
[self toEventDetail:model.id];
|
||||
}
|
||||
} else if (tableView == self.myEventTableView && self.myCreateEventDatasource.count > indexPath.row) {
|
||||
// 处理我的活动点击
|
||||
} else if (tableView == self.myEventTableView) {
|
||||
EventItemModel *model;
|
||||
switch (indexPath.section) {
|
||||
case 0: {
|
||||
model = [self.myCreateEventDatasource xpSafeObjectAtIndex:indexPath.row];
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
model = [self.mySubEventDatasource xpSafeObjectAtIndex:indexPath.row];\
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (model) {
|
||||
[self toEventDetail:model.id];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,6 +545,8 @@
|
||||
// 首次切换到活动广场,加载数据
|
||||
if (index == 1 && self.eventSquareDatasource.count == 0) {
|
||||
[self.presenter loadEventSquare:self.eventSquareTableViewPage];
|
||||
} else if (index == 2 && self.myCreateEventDatasource == 0 && self.mySubEventDatasource == 0) {
|
||||
[self.presenter loadMyEvents];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -415,22 +584,94 @@
|
||||
[self.eventSquareTableView.mj_footer setHidden:YES];
|
||||
}
|
||||
|
||||
- (void)myCreateEventListSuccess:(NSArray *)list {
|
||||
- (void)myCreateEventListSuccess:(NSArray <EventItemModel *> *)list {
|
||||
[self.myEventTableView.mj_header endRefreshing];
|
||||
|
||||
self.myCreateEventDatasource = list.mutableCopy;
|
||||
[self.myEventTableView reloadData];
|
||||
}
|
||||
|
||||
- (void)myCreateEventListFailure:(NSString *)msg {
|
||||
[self.eventSquareTableView.mj_header endRefreshing];
|
||||
[self.eventSquareTableView.mj_footer setHidden:YES];
|
||||
[self.myEventTableView.mj_header endRefreshing];
|
||||
[self.myEventTableView.mj_footer setHidden:YES];
|
||||
}
|
||||
|
||||
- (void)mySubEventListSuccess:(NSArray *)list {
|
||||
- (void)mySubEventListSuccess:(NSArray <EventItemModel *> *)list {
|
||||
[self.myEventTableView.mj_header endRefreshing];
|
||||
|
||||
if (self.myEventTableViewPage == 1) {
|
||||
self.mySubEventDatasource = list.mutableCopy;
|
||||
} else {
|
||||
[self.mySubEventDatasource addObjectsFromArray:list];
|
||||
}
|
||||
[self.myEventTableView reloadData];
|
||||
|
||||
if (list.count < 20) {
|
||||
[self.myEventTableView.mj_footer endRefreshingWithNoMoreData];
|
||||
} else {
|
||||
[self.myEventTableView.mj_footer endRefreshing];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)mySubEventListFailure:(NSString *)msg {
|
||||
[self.eventSquareTableView.mj_header endRefreshing];
|
||||
[self.eventSquareTableView.mj_footer setHidden:YES];
|
||||
[self.myEventTableView.mj_header endRefreshing];
|
||||
[self.myEventTableView.mj_footer setHidden:YES];
|
||||
}
|
||||
|
||||
- (void)eventSubActionSuccess:(BOOL)isSub eventId:(NSInteger)eventId {
|
||||
switch (self.currentIndex) {
|
||||
case 1:
|
||||
for (EventItemModel *m in self.eventSquareDatasource) {
|
||||
if (m.id == eventId) {
|
||||
m.subStatus = isSub;
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self.eventSquareTableView reloadData];
|
||||
break;
|
||||
case 2:
|
||||
for (EventItemModel *m in self.mySubEventDatasource) {
|
||||
if (m.id == eventId) {
|
||||
m.subStatus = isSub;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (EventItemModel *m in self.myCreateEventDatasource) {
|
||||
if (m.id == eventId) {
|
||||
m.subStatus = isSub;
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self.myEventTableView reloadData];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)eventSubActionFailure:(NSString *)msg {
|
||||
|
||||
}
|
||||
|
||||
- (void)deleteEventSuccess:(NSInteger)eventId {
|
||||
for (EventItemModel *m in self.mySubEventDatasource) {
|
||||
if (m.id == eventId) {
|
||||
[self.mySubEventDatasource removeObject:m];
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (EventItemModel *m in self.myCreateEventDatasource) {
|
||||
if (m.id == eventId) {
|
||||
[self.myCreateEventDatasource removeObject:m];
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self.myEventTableView reloadData];
|
||||
}
|
||||
|
||||
- (void)deleteEventFailure:(NSString *)msg {
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - Lazy Loading
|
||||
@@ -446,20 +687,9 @@
|
||||
_officialTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||
}
|
||||
[_officialTableView registerClass:[EventCenterOfficialCell class] forCellReuseIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
|
||||
[EventCenterEmptyCell registerTo:_officialTableView];
|
||||
|
||||
_officialTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
|
||||
// 下拉刷新
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self.officialTableView.mj_header endRefreshing];
|
||||
});
|
||||
}];
|
||||
_officialTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
|
||||
// 上拉加载更多
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self.officialTableView.mj_footer endRefreshing];
|
||||
});
|
||||
}];
|
||||
_officialTableView.contentInset = kOfficialTableViewContentInset();
|
||||
_officialTableView.scrollIndicatorInsets = kOfficialTableViewContentInset();
|
||||
[EventCenterEmptyCell registerTo:_officialTableView withCustomID:kOfficialEmptyID];
|
||||
}
|
||||
return _officialTableView;
|
||||
}
|
||||
@@ -474,8 +704,7 @@
|
||||
if (@available(iOS 11.0, *)) {
|
||||
_eventSquareTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||
}
|
||||
[_eventSquareTableView registerClass:[EventCenterEventCell class] forCellReuseIdentifier:NSStringFromClass([EventCenterEventCell class])];
|
||||
[EventCenterEmptyCell registerTo:_eventSquareTableView];
|
||||
[EventCenterEmptyCell registerTo:_eventSquareTableView withCustomID:kSquareEmptyID];
|
||||
[EventCenterEventCell registerTo:_eventSquareTableView];
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
@@ -488,6 +717,9 @@
|
||||
// 上拉加载更多
|
||||
[(CreateEventPresenter *)weakSelf.presenter loadEventSquare:weakSelf.eventSquareTableViewPage];
|
||||
}];
|
||||
|
||||
_eventSquareTableView.contentInset = kEventTableViewContentInset();
|
||||
_eventSquareTableView.scrollIndicatorInsets = kEventTableViewContentInset();
|
||||
}
|
||||
return _eventSquareTableView;
|
||||
}
|
||||
@@ -502,25 +734,23 @@
|
||||
if (@available(iOS 11.0, *)) {
|
||||
_myEventTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||
}
|
||||
[_myEventTableView registerClass:[EventCenterEventCell class] forCellReuseIdentifier:NSStringFromClass([EventCenterEventCell class])];
|
||||
[EventCenterEmptyCell registerTo:_myEventTableView];
|
||||
[EventCenterEmptyCell registerTo:_myEventTableView withCustomID:kMyEmptyID];
|
||||
[EventCenterEventCell registerTo:_myEventTableView];
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
_myEventTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
|
||||
// 下拉刷新
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self.myEventTableView.mj_header endRefreshing];
|
||||
if (self.myCreateEventDatasource.count == 0) {
|
||||
self.myEventTableView.mj_footer.hidden = YES;
|
||||
}
|
||||
});
|
||||
weakSelf.myEventTableViewPage = 1;
|
||||
[weakSelf.presenter loadMyEvents];
|
||||
}];
|
||||
_myEventTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
|
||||
// 上拉加载更多
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self.myEventTableView.mj_footer endRefreshing];
|
||||
});
|
||||
weakSelf.myEventTableViewPage += 1;
|
||||
[weakSelf.presenter loadMySubEvents:weakSelf.myEventTableViewPage];
|
||||
}];
|
||||
|
||||
_myEventTableView.contentInset = kEventTableViewContentInset();
|
||||
_myEventTableView.scrollIndicatorInsets = kEventTableViewContentInset();
|
||||
}
|
||||
return _myEventTableView;
|
||||
}
|
||||
|
16
YuMi/Modules/YMNewHome/View/MyEventsViewController.h
Normal file
16
YuMi/Modules/YMNewHome/View/MyEventsViewController.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// MyEventsViewController.h
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2025/5/16.
|
||||
//
|
||||
|
||||
#import "MvpViewController.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MyEventsViewController : MvpViewController
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
126
YuMi/Modules/YMNewHome/View/MyEventsViewController.m
Normal file
126
YuMi/Modules/YMNewHome/View/MyEventsViewController.m
Normal file
@@ -0,0 +1,126 @@
|
||||
//
|
||||
// MyEventsViewController.m
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2025/5/16.
|
||||
//
|
||||
|
||||
#import "MyEventsViewController.h"
|
||||
#import "CreateEventPresenter.h"
|
||||
#import "EventCenterEmptyCell.h"
|
||||
#import "EventCenterEventCell.h"
|
||||
#import "XPWebViewController.h"
|
||||
|
||||
@interface MyEventsViewController () <UITableViewDataSource, UITableViewDelegate, CreateEventPresenterProcotol>
|
||||
|
||||
@property (nonatomic, assign) NSInteger page;
|
||||
@property (nonatomic, strong) UITableView *myEventTableView;
|
||||
@property (nonatomic, strong) NSMutableArray <EventItemModel *>*datasource;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MyEventsViewController
|
||||
|
||||
- (CreateEventPresenter *)createPresenter {
|
||||
return [[CreateEventPresenter alloc] init];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
self.title = YMLocalizedString(@"20.20.59_text_4");
|
||||
|
||||
[self.view addSubview:self.myEventTableView];
|
||||
[self.myEventTableView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.mas_equalTo(self.view);
|
||||
}];
|
||||
|
||||
[self.myEventTableView.mj_header beginRefreshing];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return self.datasource.count == 0 ? 1 : self.datasource.count;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return self.datasource.count == 0 ? [EventCenterEmptyCell cellHeight] : [EventCenterEventCell cellHeight];
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (self.datasource.count == 0) {
|
||||
return [EventCenterEmptyCell cellFor:tableView customID:@"" atIndexPath:indexPath];
|
||||
}
|
||||
EventCenterEventCell *cell = [EventCenterEventCell cellFor:tableView atIndexPath:indexPath];
|
||||
EventItemModel *model = [self.datasource xpSafeObjectAtIndex:indexPath.row];
|
||||
[cell updateCell:model];
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
EventItemModel *model = [self.datasource xpSafeObjectAtIndex:indexPath.row];
|
||||
if (model) {
|
||||
XPWebViewController * webVC = [[XPWebViewController alloc] initWithRoomUID:nil];
|
||||
webVC.url = [NSString stringWithFormat:@"%@%@",
|
||||
URLWithType(kEventDetailPath),
|
||||
@(model.id)];
|
||||
[self.navigationController pushViewController:webVC animated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - CreateEventPresenterProcotol
|
||||
- (void)myCreateEventListSuccess:(NSArray<EventItemModel *> *)list {
|
||||
if (self.page > 1) {
|
||||
[self.datasource addObjectsFromArray:list];
|
||||
} else {
|
||||
self.datasource = list.mutableCopy;
|
||||
|
||||
// 首次加载完成后,根据数据量添加footer
|
||||
if (!self.myEventTableView.mj_footer) {
|
||||
__weak typeof(self) weakSelf = self;
|
||||
MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
|
||||
// 上拉加载更多
|
||||
weakSelf.page += 1;
|
||||
[weakSelf.presenter loadMyCreateEvents:weakSelf.page];
|
||||
}];
|
||||
[footer setTitle:YMLocalizedString(@"20.20.59_text_23") forState:MJRefreshStateNoMoreData];
|
||||
self.myEventTableView.mj_footer = footer;
|
||||
}
|
||||
}
|
||||
[self.myEventTableView reloadData];
|
||||
|
||||
[self.myEventTableView.mj_header endRefreshing];
|
||||
if (list.count < 20) {
|
||||
[self.myEventTableView.mj_footer endRefreshingWithNoMoreData];
|
||||
} else {
|
||||
[self.myEventTableView.mj_footer resetNoMoreData];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)myCreateEventListFailure:(NSString *)msg {
|
||||
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
- (UITableView *)myEventTableView {
|
||||
if (!_myEventTableView) {
|
||||
_myEventTableView = [[UITableView alloc] init];
|
||||
_myEventTableView.backgroundColor = [UIColor whiteColor];
|
||||
_myEventTableView.delegate = self;
|
||||
_myEventTableView.dataSource = self;
|
||||
_myEventTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||
if (@available(iOS 11.0, *)) {
|
||||
_myEventTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||
}
|
||||
[EventCenterEmptyCell registerTo:_myEventTableView withCustomID:@""];
|
||||
[EventCenterEventCell registerTo:_myEventTableView];
|
||||
__weak typeof(self) weakSelf = self;
|
||||
_myEventTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
|
||||
// 下拉刷新
|
||||
weakSelf.page = 1;
|
||||
[weakSelf.presenter loadMyCreateEvents:weakSelf.page];
|
||||
}];
|
||||
}
|
||||
return _myEventTableView;
|
||||
}
|
||||
@end
|
@@ -15,8 +15,8 @@
|
||||
#import "ChatFaceVo.h"
|
||||
|
||||
@interface XPRoomFaceTitleCollectionViewCell ()
|
||||
///标题
|
||||
@property (nonatomic,strong) UILabel *titleLabel;
|
||||
|
||||
@property (nonatomic, strong) UIView *selectedBG;
|
||||
@property (nonatomic, strong) NetImageView *imageView;
|
||||
@end
|
||||
|
||||
@@ -34,57 +34,61 @@
|
||||
|
||||
- (void)prepareForReuse {
|
||||
[super prepareForReuse];
|
||||
if (self.titleModel.tabModel){
|
||||
self.imageView.hidden = NO;
|
||||
} else {
|
||||
self.imageView.hidden = YES;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setSelected:(BOOL)selected {
|
||||
[super setSelected:selected];
|
||||
|
||||
// 根据选中状态显示或隐藏selectedBG
|
||||
self.selectedBG.hidden = !selected;
|
||||
}
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
[self.contentView addSubview:self.titleLabel];
|
||||
[self.contentView addSubview:self.selectedBG];
|
||||
[self.contentView addSubview:self.imageView];
|
||||
|
||||
// 默认隐藏选中背景
|
||||
self.selectedBG.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
[self.selectedBG mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.mas_equalTo(self.contentView);
|
||||
}];
|
||||
|
||||
[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.mas_equalTo(self.contentView);
|
||||
make.edges.mas_equalTo(self.contentView).insets(UIEdgeInsetsMake(4, 4, 4, 4));
|
||||
}];
|
||||
}
|
||||
#pragma mark - Getters And Setters
|
||||
- (void)setTitleModel:(RoomFaceTitleItemModel *)titleModel {
|
||||
_titleModel = titleModel;
|
||||
self.titleLabel.hidden = titleModel.tabModel;
|
||||
self.imageView.hidden = !titleModel.tabModel;
|
||||
if (titleModel.tabModel) {
|
||||
[self.imageView setImageUrl:titleModel.tabModel.tabUrl];
|
||||
} else {
|
||||
if (titleModel) {
|
||||
self.titleLabel.text = titleModel.title;
|
||||
self.titleLabel.textColor = titleModel.isSelect ? [DJDKMIMOMColor appMainColor] : [UIColor whiteColor];
|
||||
}
|
||||
self.imageView.image = kImage(@"鸭子");
|
||||
}
|
||||
}
|
||||
|
||||
- (UILabel *)titleLabel {
|
||||
if (!_titleLabel) {
|
||||
_titleLabel = [[UILabel alloc] init];
|
||||
_titleLabel.font = [UIFont systemFontOfSize:14];
|
||||
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||
}
|
||||
return _titleLabel;
|
||||
// 根据model的isSelect属性更新选中状态UI
|
||||
self.selectedBG.hidden = !titleModel.isSelect;
|
||||
}
|
||||
|
||||
- (NetImageView *)imageView {
|
||||
if (!_imageView) {
|
||||
_imageView = [[NetImageView alloc] init];
|
||||
_imageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||
}
|
||||
return _imageView;
|
||||
}
|
||||
|
||||
- (UIView *)selectedBG {
|
||||
if (!_selectedBG) {
|
||||
_selectedBG = [[UIView alloc] init];
|
||||
_selectedBG.backgroundColor = UIColorFromRGB(0x272727);
|
||||
[_selectedBG setCornerRadius:8];
|
||||
}
|
||||
return _selectedBG;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -37,12 +37,9 @@
|
||||
@property (nonatomic,strong) UIView * contentView;
|
||||
///最外层的容器
|
||||
@property (nonatomic,strong) UIStackView *stackView;
|
||||
///标题的容器
|
||||
@property (nonatomic,strong) UIStackView *titleStackView;
|
||||
///列表
|
||||
@property (nonatomic,strong) UICollectionView *titleCollectionView;
|
||||
///VIP特权
|
||||
@property (nonatomic,strong) UIButton *noblePrivilButton;
|
||||
|
||||
///列表
|
||||
@property (nonatomic,strong) UICollectionView *faceCollectionView;
|
||||
///分页控件
|
||||
@@ -86,14 +83,14 @@
|
||||
[self.presenter getUserInfo];
|
||||
if ([XPRoomFaceTool shareFaceTool].faceDirectory) {
|
||||
[self.presenter getRoomNormalFace];
|
||||
[self.presenter getRoomNobelFace];
|
||||
// [self.presenter getRoomNobelFace];
|
||||
} else {
|
||||
[self showLoading];
|
||||
[[XPRoomFaceTool shareFaceTool] downFaceDataCompletion:^(NSString * _Nonnull path) {
|
||||
[self hideHUD];
|
||||
if (path.length > 0) {
|
||||
[self.presenter getRoomNormalFace];
|
||||
[self.presenter getRoomNobelFace];
|
||||
// [self.presenter getRoomNobelFace];
|
||||
} else {
|
||||
[self showErrorToast:YMLocalizedString(@"XPRoomFaceViewController0")];
|
||||
}
|
||||
@@ -108,13 +105,10 @@
|
||||
|
||||
[self.contentView addSubview:self.stackView];
|
||||
|
||||
[self.stackView addArrangedSubview:self.titleStackView];
|
||||
[self.stackView addArrangedSubview:self.titleCollectionView];
|
||||
[self.stackView addArrangedSubview:self.faceCollectionView];
|
||||
[self.stackView addArrangedSubview:self.pageView];
|
||||
|
||||
[self.titleStackView addArrangedSubview:self.titleCollectionView];
|
||||
// [self.titleStackView addArrangedSubview:self.noblePrivilButton];
|
||||
|
||||
NSArray *faceTabs = [[XPRoomFaceTool shareFaceTool] loadFaceTabs];
|
||||
for (ChatFaceResponse *tab in faceTabs) {
|
||||
RoomFaceTitleItemModel *item = [[RoomFaceTitleItemModel alloc] init];
|
||||
@@ -157,8 +151,8 @@
|
||||
}];
|
||||
|
||||
|
||||
[self.titleStackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(53);
|
||||
[self.titleCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(36);
|
||||
}];
|
||||
|
||||
[self.pageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
@@ -170,15 +164,6 @@
|
||||
[self.faceCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(collectionViewHeight);
|
||||
}];
|
||||
|
||||
// [self.noblePrivilButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.size.mas_equalTo(CGSizeMake(84, 26));
|
||||
// }];
|
||||
|
||||
[self.titleCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.mas_equalTo(108);
|
||||
make.height.mas_equalTo(28);
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)updatePageViewState:(NSArray *)array {
|
||||
@@ -301,14 +286,7 @@
|
||||
#pragma mark - UICollectionViewDelegate And UICollectionViewDatasource
|
||||
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (collectionView == self.titleCollectionView) {
|
||||
RoomFaceTitleItemModel * itemModel = [self.titleList xpSafeObjectAtIndex:indexPath.row];
|
||||
if (itemModel.tabModel) {
|
||||
return CGSizeMake(34, 34);
|
||||
} else {
|
||||
CGSize size = [itemModel.title boundingRectWithSize:CGSizeMake(120, CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading | NSStringDrawingTruncatesLastVisibleLine
|
||||
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13]} context:nil].size;
|
||||
return CGSizeMake(size.width + 10, size.height);
|
||||
}
|
||||
return CGSizeMake(34, 34);
|
||||
} else if (collectionView == self.faceCollectionView) {
|
||||
CGFloat itemWidth = (CGFloat)(KScreenWidth - 15 * 2 - 10 * 4) / (CGFloat)5;
|
||||
return CGSizeMake(itemWidth, itemWidth + 20);
|
||||
@@ -362,6 +340,7 @@
|
||||
|
||||
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (collectionView == self.titleCollectionView) {
|
||||
|
||||
RoomFaceTitleItemModel * titleModel = [self.titleList xpSafeObjectAtIndex:indexPath.row];
|
||||
self.selectTitleItem = titleModel;
|
||||
[self.titleCollectionView reloadData];
|
||||
@@ -456,35 +435,6 @@
|
||||
return _stackView;
|
||||
}
|
||||
|
||||
- (UIStackView *)titleStackView {
|
||||
if (!_titleStackView) {
|
||||
_titleStackView = [[UIStackView alloc] init];
|
||||
_titleStackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_titleStackView.distribution = UIStackViewDistributionFill;
|
||||
_titleStackView.alignment = UIStackViewAlignmentBottom;
|
||||
_titleStackView.spacing = 10;
|
||||
CAShapeLayer * layer = [CAShapeLayer layer];
|
||||
UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KScreenWidth, 53) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(12, 12)];
|
||||
layer.path = path.CGPath;
|
||||
_titleStackView.layer.masksToBounds = YES;
|
||||
_titleStackView.layer.mask = layer;;
|
||||
}
|
||||
return _titleStackView;
|
||||
}
|
||||
|
||||
- (UIButton *)noblePrivilButton {
|
||||
if (!_noblePrivilButton) {
|
||||
_noblePrivilButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_noblePrivilButton setImage:[UIImage imageNamed:@"room_face_nobel_privil"] forState:UIControlStateNormal];
|
||||
[_noblePrivilButton setImage:[UIImage imageNamed:@"room_face_nobel_privil"] forState:UIControlStateSelected];
|
||||
[_noblePrivilButton addTarget:self action:@selector(noblePrivilButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_noblePrivilButton.hidden = YES;
|
||||
[_noblePrivilButton setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
|
||||
}
|
||||
return _noblePrivilButton;
|
||||
}
|
||||
|
||||
|
||||
- (UICollectionView *)titleCollectionView{
|
||||
if (!_titleCollectionView) {
|
||||
MSBaseRTLFlowLayout *layout = [[MSBaseRTLFlowLayout alloc] init];
|
||||
@@ -531,11 +481,7 @@
|
||||
normalItem.isSelect = YES;
|
||||
normalItem.faceType = RoomFaceTitleItemType_Normal;
|
||||
|
||||
RoomFaceTitleItemModel * nobelItem = [[RoomFaceTitleItemModel alloc] init];
|
||||
nobelItem.title= YMLocalizedString(@"XPRoomFaceViewController3");
|
||||
nobelItem.isSelect = NO;
|
||||
nobelItem.faceType = RoomFaceTitleItemType_Nobel;
|
||||
_titleList = @[normalItem, nobelItem].mutableCopy;
|
||||
_titleList = @[normalItem].mutableCopy;
|
||||
}
|
||||
return _titleList;
|
||||
}
|
||||
|
@@ -107,9 +107,9 @@
|
||||
}];
|
||||
|
||||
[self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(self.contentView).offset(18);
|
||||
make.top.mas_equalTo(self.contentView).offset(4);
|
||||
make.centerX.mas_equalTo(self.contentView);
|
||||
make.size.mas_equalTo(CGSizeMake(48, 48));
|
||||
make.size.mas_equalTo(CGSizeMake(62, 62));
|
||||
}];
|
||||
|
||||
[self.giftNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
|
@@ -913,11 +913,7 @@
|
||||
_faceSvgaImageView.userInteractionEnabled = YES;
|
||||
_faceSvgaImageView.autoPlay = YES;
|
||||
_faceSvgaImageView.clearsAfterStop = YES;
|
||||
#if DEBUG
|
||||
_faceSvgaImageView.loops = 1;
|
||||
#else
|
||||
_faceSvgaImageView.loops = 1;
|
||||
#endif
|
||||
}
|
||||
return _faceSvgaImageView;
|
||||
}
|
||||
|
@@ -197,44 +197,64 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
|
||||
|
||||
- (void)registerSocialCallBack {
|
||||
// 注册分享回调事件
|
||||
[[SocialShareManager sharedManager] setHandleJumpToRoom:^(NSString * _Nonnull roomID) {
|
||||
if (![NSString isEmpty:roomID]) {
|
||||
//判断是否在房间
|
||||
__block BOOL isInRoom = NO;
|
||||
__block XPRoomViewController *currentRoom;
|
||||
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||
if ([obj isKindOfClass:[XPRoomViewController class]]) {
|
||||
currentRoom = obj;
|
||||
*stop = YES;
|
||||
isInRoom = YES;
|
||||
}
|
||||
}];
|
||||
|
||||
// 如果有 mini 房间
|
||||
if (isInRoom == NO && [XPRoomMiniManager shareManager].getRoomInfo) {
|
||||
@kWeakify(self);
|
||||
[TTPopup alertWithMessage:YMLocalizedString(@"Combo_10") confirmHandler:^{
|
||||
@kStrongify(self);
|
||||
[[RtcManager instance] exitRoom];
|
||||
[[NIMSDK sharedSDK].chatroomManager exitChatroom:[NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId] completion:nil];
|
||||
[self.roomMineView hiddenRoomMiniView];
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[[SocialShareManager sharedManager] setHandleJumpToRoom:^(ShareItmeInfo * _Nonnull shareItem) {
|
||||
switch (shareItem.shareType) {
|
||||
case 1: { // 跳转到房间
|
||||
NSString *roomID = shareItem.targetUid;
|
||||
if (![NSString isEmpty:roomID]) {
|
||||
//判断是否在房间
|
||||
__block BOOL isInRoom = NO;
|
||||
__block XPRoomViewController *currentRoom;
|
||||
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||
if ([obj isKindOfClass:[XPRoomViewController class]]) {
|
||||
currentRoom = obj;
|
||||
*stop = YES;
|
||||
isInRoom = YES;
|
||||
}
|
||||
}];
|
||||
|
||||
// 如果有 mini 房间
|
||||
if (isInRoom == NO && [XPRoomMiniManager shareManager].getRoomInfo) {
|
||||
@kWeakify(self);
|
||||
[TTPopup alertWithMessage:YMLocalizedString(@"Combo_10") confirmHandler:^{
|
||||
@kStrongify(self);
|
||||
[[RtcManager instance] exitRoom];
|
||||
[[NIMSDK sharedSDK].chatroomManager exitChatroom:[NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId] completion:nil];
|
||||
[self.roomMineView hiddenRoomMiniView];
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[XPRoomViewController openRoom:roomID
|
||||
viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
});
|
||||
} cancelHandler:^{}];
|
||||
} else if (isInRoom && ![currentRoom isSameRoom:roomID]) {
|
||||
[TTPopup alertWithMessage:YMLocalizedString(@"Combo_10") confirmHandler:^{
|
||||
[currentRoom exitRoom];
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[XPRoomViewController openRoom:roomID
|
||||
viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
});
|
||||
} cancelHandler:^{}];
|
||||
} else {
|
||||
[XPRoomViewController openRoom:roomID
|
||||
viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
});
|
||||
} cancelHandler:^{}];
|
||||
} else if (isInRoom && ![currentRoom isSameRoom:roomID]) {
|
||||
[TTPopup alertWithMessage:YMLocalizedString(@"Combo_10") confirmHandler:^{
|
||||
[currentRoom exitRoom];
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[XPRoomViewController openRoom:roomID
|
||||
viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
});
|
||||
} cancelHandler:^{}];
|
||||
} else {
|
||||
[XPRoomViewController openRoom:roomID
|
||||
viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case 2: // 跳转到活动
|
||||
{
|
||||
XPWebViewController * webVC = [[XPWebViewController alloc] initWithRoomUID:nil];
|
||||
webVC.url = [NSString stringWithFormat:@"%@%@",
|
||||
URLWithType(kEventDetailPath),
|
||||
shareItem.targetId];
|
||||
[self.navigationController pushViewController:webVC animated:YES];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@
|
||||
#import <MJExtension/MJExtension.h>
|
||||
#import "XCCurrentVCStackManager.h"
|
||||
#import "XPMineUserInfoViewController.h"
|
||||
|
||||
#import "ShareHelder.h"
|
||||
#import "Api+Mine.h"
|
||||
#import "YuMi-swift.h"
|
||||
#import "RechargeStorage.h"
|
||||
@@ -127,6 +127,7 @@ NSString * const kJSGoToExchangeGold = @"goToExchangeGold";
|
||||
NSString * const kJSOpenPayment = @"openPayment";
|
||||
NSString * const kJSOpenPaymentCallback = @"openPaymentCallback";
|
||||
NSString * const kJSVerifyCaptchaCallBack = @"closeToVerify";
|
||||
NSString * const kJSShowShareCallBack = @"showShareAction";
|
||||
|
||||
|
||||
@implementation XPWebViewController
|
||||
@@ -373,8 +374,8 @@ NSString * const kJSVerifyCaptchaCallBack = @"closeToVerify";
|
||||
///测试环境只要有host就执行,方便h5连接本地调试
|
||||
BOOL condition = currentUrl != nil && [currentUrl containsString:API_HOST_URL];
|
||||
#ifdef DEBUG
|
||||
// NSLog(@"-- -- - -- - - | -- -- - -- - -%@", response);
|
||||
// NSLog(@"-- -- - -- - -%@: %@", message.name, message.body);
|
||||
NSLog(@"-- -- - -- - - | -- -- - -- - -%@", response);
|
||||
NSLog(@"-- -- - -- - -%@: %@", message.name, message.body);
|
||||
condition = currentUrl != nil;
|
||||
#endif
|
||||
if(condition) {
|
||||
@@ -567,19 +568,27 @@ NSString * const kJSVerifyCaptchaCallBack = @"closeToVerify";
|
||||
self.savePhotoDic = bodyDic;
|
||||
[self showShareSavePhote];
|
||||
}
|
||||
}else if([message.name isEqualToString:kJSGoToExchangeGold]){
|
||||
} else if([message.name isEqualToString:kJSGoToExchangeGold]){
|
||||
XPIncomeRecordVC *incomeRecordVC = [XPIncomeRecordVC new];
|
||||
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:incomeRecordVC animated:YES];
|
||||
}else if([message.name isEqualToString:kJSOpenPayment]) {
|
||||
} else if([message.name isEqualToString:kJSOpenPayment]) {
|
||||
[self handleOpenPayment:message.body];
|
||||
} else if([message.name isEqualToString:kJSVerifyCaptchaCallBack]) {
|
||||
[self handleCaptchaResult:[message.body integerValue] == 1];
|
||||
} else if([message.name isEqualToString:kJSShowShareCallBack]) {
|
||||
[self handleShareActioin];
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
- (void)handleShareActioin {
|
||||
[ShareHelder shareImage:kImage(@"share_icon") //self.hostDelegate.getRoomInfo.avatar
|
||||
url:self.url
|
||||
fromController:[XCCurrentVCStackManager shareManager].getCurrentVC];
|
||||
}
|
||||
|
||||
- (void)handleCaptchaResult:(BOOL)reuslt {
|
||||
if (_verifyCaptcha) {
|
||||
self.verifyCaptcha(reuslt);
|
||||
@@ -983,6 +992,7 @@ NSString * const kJSVerifyCaptchaCallBack = @"closeToVerify";
|
||||
[_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenPayment];
|
||||
[_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenPaymentCallback];
|
||||
[_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSVerifyCaptchaCallBack];
|
||||
[_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSShowShareCallBack];
|
||||
|
||||
}
|
||||
return _pi_userContentController;
|
||||
|
@@ -149,7 +149,7 @@
|
||||
}
|
||||
|
||||
+ (void)shareGetInfo:(HttpRequestHelperCompletion)completion code:(NSString *)code {
|
||||
[self makeRequest:@"share/getInfo"// [NSString stringWithFormat:@"share/getInfo?code=%@", code]
|
||||
[self makeRequest:@"share/getInfo"
|
||||
method:HttpRequestHelperMethodGET
|
||||
completion:completion,
|
||||
__FUNCTION__,
|
||||
|
@@ -9,9 +9,18 @@
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface ShareItmeInfo : PIBaseModel
|
||||
|
||||
@property(nonatomic, copy) NSString *shareId;
|
||||
@property(nonatomic, copy) NSString *uid;
|
||||
@property(nonatomic, copy) NSString *targetUid;
|
||||
@property(nonatomic, copy) NSString *targetId;
|
||||
@property(nonatomic, assign) NSInteger shareType; // 1. 房间; 2. 活动
|
||||
@end
|
||||
|
||||
@interface SocialShareManager : NSObject
|
||||
|
||||
@property(nonatomic, copy, nullable) void(^handleJumpToRoom)(NSString *roomID);
|
||||
@property(nonatomic, copy, nullable) void(^handleJumpToRoom)(ShareItmeInfo *shareItem);
|
||||
|
||||
+ (instancetype)sharedManager;
|
||||
- (void)handleURL:(NSURL *)url;
|
||||
|
@@ -8,13 +8,7 @@
|
||||
#import "SocialShareManager.h"
|
||||
#import "Api.h"
|
||||
|
||||
@interface ShareItmeInfo : PIBaseModel
|
||||
|
||||
@property(nonatomic, copy) NSString *shareId;
|
||||
@property(nonatomic, copy) NSString *uid;
|
||||
@property(nonatomic, copy) NSString *targetUid;
|
||||
|
||||
@end
|
||||
|
||||
@implementation ShareItmeInfo
|
||||
|
||||
@@ -99,7 +93,7 @@
|
||||
if (code == 200) {
|
||||
self.shareItem = [ShareItmeInfo modelWithJSON:data.data];
|
||||
if (self.handleJumpToRoom) {
|
||||
self.handleJumpToRoom(self.shareItem.targetUid);
|
||||
self.handleJumpToRoom(self.shareItem);
|
||||
[self cleanCache];
|
||||
}
|
||||
}
|
||||
|
@@ -4173,13 +4173,13 @@ ineHeadView12" = "الحمل";
|
||||
"20.20.59_text_2" = "Offical";
|
||||
"20.20.59_text_3" = "Event Square";
|
||||
"20.20.59_text_4" = "My Events";
|
||||
"20.20.59_text_5" = "Sub";
|
||||
"20.20.59_text_6" = "Unsub";
|
||||
"20.20.59_text_7" = "Participate";
|
||||
"20.20.59_text_5" = " Sub";
|
||||
"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_11" = "Upload Banner to Homepage(Costs %@)";
|
||||
"20.20.59_text_12" = "YES";
|
||||
"20.20.59_text_13" = "NO";
|
||||
"20.20.59_text_14" = "Select Room";
|
||||
@@ -4188,3 +4188,9 @@ ineHeadView12" = "الحمل";
|
||||
"20.20.59_text_17" = "Event Content";
|
||||
"20.20.59_text_18" = "Notify My Fans";
|
||||
"20.20.59_text_19" = "No rooms available~";
|
||||
"20.20.59_text_22" = "My Sub";
|
||||
"20.20.59_text_23" = "Only the data of the last 30 days is displayed";
|
||||
"20.20.59_text_24" = "Event starting";
|
||||
"20.20.59_text_25" = "Event ended";
|
||||
"20.20.59_text_26" = "Your Event is about to start! Your fans and subscribers have been notified!";
|
||||
"20.20.59_text_27" = "The Event you followed is about to start—click to join now!!!";
|
||||
|
@@ -3958,13 +3958,13 @@
|
||||
"20.20.59_text_2" = "Offical";
|
||||
"20.20.59_text_3" = "Event Square";
|
||||
"20.20.59_text_4" = "My Events";
|
||||
"20.20.59_text_5" = "Sub";
|
||||
"20.20.59_text_6" = "Unsub";
|
||||
"20.20.59_text_7" = "Participate";
|
||||
"20.20.59_text_5" = " Sub";
|
||||
"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_11" = "Upload Banner to Homepage(Costs %@)";
|
||||
"20.20.59_text_12" = "YES";
|
||||
"20.20.59_text_13" = "NO";
|
||||
"20.20.59_text_14" = "Select Room";
|
||||
@@ -3973,3 +3973,9 @@
|
||||
"20.20.59_text_17" = "Event Content";
|
||||
"20.20.59_text_18" = "Notify My Fans";
|
||||
"20.20.59_text_19" = "No rooms available~";
|
||||
"20.20.59_text_22" = "My Sub";
|
||||
"20.20.59_text_23" = "Only the data of the last 30 days is displayed";
|
||||
"20.20.59_text_24" = "Event starting";
|
||||
"20.20.59_text_25" = "Event ended";
|
||||
"20.20.59_text_26" = "Your Event is about to start! Your fans and subscribers have been notified!";
|
||||
"20.20.59_text_27" = "The Event you followed is about to start—click to join now!!!";
|
||||
|
@@ -3751,13 +3751,13 @@
|
||||
"20.20.59_text_2" = "Offical";
|
||||
"20.20.59_text_3" = "Event Square";
|
||||
"20.20.59_text_4" = "My Events";
|
||||
"20.20.59_text_5" = "Sub";
|
||||
"20.20.59_text_6" = "Unsub";
|
||||
"20.20.59_text_7" = "Participate";
|
||||
"20.20.59_text_5" = " Sub";
|
||||
"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_11" = "Upload Banner to Homepage(Costs %@)";
|
||||
"20.20.59_text_12" = "YES";
|
||||
"20.20.59_text_13" = "NO";
|
||||
"20.20.59_text_14" = "Select Room";
|
||||
@@ -3766,3 +3766,9 @@
|
||||
"20.20.59_text_17" = "Event Content";
|
||||
"20.20.59_text_18" = "Notify My Fans";
|
||||
"20.20.59_text_19" = "No rooms available~";
|
||||
"20.20.59_text_22" = "My Sub";
|
||||
"20.20.59_text_23" = "Only the data of the last 30 days is displayed";
|
||||
"20.20.59_text_24" = "Event starting";
|
||||
"20.20.59_text_25" = "Event ended";
|
||||
"20.20.59_text_26" = "Your Event is about to start! Your fans and subscribers have been notified!";
|
||||
"20.20.59_text_27" = "The Event you followed is about to start—click to join now!!!";
|
||||
|
@@ -3622,14 +3622,14 @@
|
||||
"20.20.59_text_1" = "老年人活動中心";
|
||||
"20.20.59_text_2" = "Offical";
|
||||
"20.20.59_text_3" = "Event Square";
|
||||
"20.20.59_text_4" = "My Events";
|
||||
"20.20.59_text_5" = "Sub";
|
||||
"20.20.59_text_6" = "Unsub";
|
||||
"20.20.59_text_7" = "Participate";
|
||||
"20.20.59_text_4" = "My Event";
|
||||
"20.20.59_text_5" = " Sub";
|
||||
"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_11" = "Upload Banner to Homepage(Costs %@)";
|
||||
"20.20.59_text_12" = "YES";
|
||||
"20.20.59_text_13" = "NO";
|
||||
"20.20.59_text_14" = "Select Room";
|
||||
@@ -3640,3 +3640,9 @@
|
||||
"20.20.59_text_19" = "No rooms available~";
|
||||
"20.20.59_text_20" = "My Rooms";
|
||||
"20.20.59_text_21" = "Admin Rooms";
|
||||
"20.20.59_text_22" = "My Sub";
|
||||
"20.20.59_text_23" = "Only the data of the last 30 days is displayed";
|
||||
"20.20.59_text_24" = "Event starting";
|
||||
"20.20.59_text_25" = "Event ended";
|
||||
"20.20.59_text_26" = "Your Event is about to start! Your fans and subscribers have been notified!";
|
||||
"20.20.59_text_27" = "The Event you followed is about to start—click to join now!!!";
|
||||
|
Reference in New Issue
Block a user