更新活动中心模块,新增事件配置模型及相关API接口,优化事件列表展示,修复部分UI问题,更新本地化字符串,调整部分UI组件。删除不再使用的视图控制器。版本号更新至20.20.61。

This commit is contained in:
edwinQQQ
2025-05-19 19:27:53 +08:00
parent a99e650d45
commit 353491f56f
56 changed files with 1625 additions and 963 deletions

View File

@@ -8,11 +8,13 @@
],
"cSpell.words": [
"autoreleasepool",
"Autoresizing",
"Bugly",
"MSRTL",
"NIMSDK",
"Nonnull",
"NSEC",
"Procotol",
"Subview",
"Superview",
"Uids"

View File

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

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View 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

View File

@@ -0,0 +1,12 @@
//
// EventConfigModel.m
// YuMi
//
// Created by P on 2025/5/15.
//
#import "EventConfigModel.h"
@implementation EventConfigModel
@end

View File

@@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign) NSTimeInterval createTime; // 创建时间戳
@property (nonatomic, copy) NSString *gender;
@property (nonatomic, copy) NSString *nick;
@end

View 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

View 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

View File

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

View File

@@ -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. uploadToHomeYES
//
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

View File

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

View File

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

View File

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

View File

@@ -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
// contentEdgeInsetsimageEdgeInsetstitleEdgeInsets
}
return _statusButton;
}
@end

View File

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

View File

@@ -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) {
// 60241440
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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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];
}
// 使TZImagePickerControllerPHPickerViewController
[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

View File

@@ -1,7 +0,0 @@
@interface EventCenterEmptyCell : UITableViewCell
+ (CGFloat)cellHeight;
+ (void)registerTo:(UITableView *)tableView;
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
@end

View File

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

View File

@@ -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 @@
// tabcreateButton
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;
}

View 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

View 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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