From f8887a3a2a02c2d39d8b2196a19c38e4684c0508 Mon Sep 17 00:00:00 2001 From: chenguilong <598604202@qq.com> Date: Tue, 6 Sep 2022 11:41:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E6=90=9C=E7=B4=A2=E5=8F=8A?= =?UTF-8?q?=E8=BF=9B=E6=88=BF=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 20 + .../Home/Presenter/XPInRoomRecordPresenter.h | 22 ++ .../Home/Presenter/XPInRoomRecordPresenter.m | 34 ++ .../Home/Protocol/XPInRoomRecordProtocol.h | 30 ++ .../Cell/XPHomeAttentionCollectionViewCell.h | 5 +- .../Cell/XPHomeAttentionCollectionViewCell.m | 10 + .../Home/View/Cell/XPHomeSearchRecordCell.h | 18 + .../Home/View/Cell/XPHomeSearchRecordCell.m | 51 +++ .../Home/View/SubViews/XPHomeSearchNavView.h | 3 + .../Home/View/SubViews/XPHomeSearchNavView.m | 16 + .../XPRoomSearchContainerViewController.m | 43 ++- .../View/XPRoomSearchRecordViewController.h | 29 ++ .../View/XPRoomSearchRecordViewController.m | 349 ++++++++++++++++++ 13 files changed, 628 insertions(+), 2 deletions(-) create mode 100644 xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.h create mode 100644 xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.m create mode 100644 xplan-ios/Main/Home/Protocol/XPInRoomRecordProtocol.h create mode 100644 xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.h create mode 100644 xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.m create mode 100644 xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.h create mode 100644 xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.m diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 66d999a8..010af8ef 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -204,6 +204,8 @@ 9B86D88328192DC000494FCD /* XPRoomRankEntranceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B86D88228192DC000494FCD /* XPRoomRankEntranceView.m */; }; 9B86D886281942D200494FCD /* SocialMicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B86D885281942D200494FCD /* SocialMicroView.m */; }; 9B88E20C28C5EB8300D26FBA /* MessageContentRedPacketView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B88E20B28C5EB8300D26FBA /* MessageContentRedPacketView.m */; }; + 9B88E20F28C6305400D26FBA /* XPRoomSearchRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B88E20E28C6305400D26FBA /* XPRoomSearchRecordViewController.m */; }; + 9B88E21228C6365B00D26FBA /* XPHomeSearchRecordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B88E21128C6365B00D26FBA /* XPHomeSearchRecordCell.m */; }; 9B8DE0E1289CF02900FB6EC2 /* XPGiftCompoundModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B8DE0E0289CF02900FB6EC2 /* XPGiftCompoundModel.m */; }; 9B8DE0E4289CF7AA00FB6EC2 /* XPRoomGiftCompoundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B8DE0E3289CF7AA00FB6EC2 /* XPRoomGiftCompoundView.m */; }; 9B8DE0E8289CFE8100FB6EC2 /* compound_gift_banner.svga in Resources */ = {isa = PBXBuildFile; fileRef = 9B8DE0E7289CFE8100FB6EC2 /* compound_gift_banner.svga */; }; @@ -240,6 +242,7 @@ 9BA8A48327C726E8000365A3 /* ThemeColor+SkillCard.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA8A48227C726E8000365A3 /* ThemeColor+SkillCard.m */; }; 9BAA5FED277A1BBE007453F3 /* XPPrivacyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA5FEC277A1BBE007453F3 /* XPPrivacyViewController.m */; }; 9BAA5FF0277A23F4007453F3 /* XPPermissionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA5FEF277A23F4007453F3 /* XPPermissionsViewController.m */; }; + 9BAD41AC28C6EB13005E47B3 /* XPInRoomRecordPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAD41AB28C6EB13005E47B3 /* XPInRoomRecordPresenter.m */; }; 9BB549592782E6A30090CD26 /* XPNobleCenterPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB549582782E6A30090CD26 /* XPNobleCenterPresenter.m */; }; 9BB5495C2782E79E0090CD26 /* NobleCenterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB5495B2782E79E0090CD26 /* NobleCenterModel.m */; }; 9BB5495F2782E9DB0090CD26 /* NobleAuthInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB5495E2782E9DB0090CD26 /* NobleAuthInfo.m */; }; @@ -1565,6 +1568,10 @@ 9B86D885281942D200494FCD /* SocialMicroView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SocialMicroView.m; sourceTree = ""; }; 9B88E20A28C5EB8300D26FBA /* MessageContentRedPacketView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessageContentRedPacketView.h; sourceTree = ""; }; 9B88E20B28C5EB8300D26FBA /* MessageContentRedPacketView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageContentRedPacketView.m; sourceTree = ""; }; + 9B88E20D28C6305400D26FBA /* XPRoomSearchRecordViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomSearchRecordViewController.h; sourceTree = ""; }; + 9B88E20E28C6305400D26FBA /* XPRoomSearchRecordViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomSearchRecordViewController.m; sourceTree = ""; }; + 9B88E21028C6365B00D26FBA /* XPHomeSearchRecordCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPHomeSearchRecordCell.h; sourceTree = ""; }; + 9B88E21128C6365B00D26FBA /* XPHomeSearchRecordCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPHomeSearchRecordCell.m; sourceTree = ""; }; 9B8DE0DF289CF02900FB6EC2 /* XPGiftCompoundModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftCompoundModel.h; sourceTree = ""; }; 9B8DE0E0289CF02900FB6EC2 /* XPGiftCompoundModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftCompoundModel.m; sourceTree = ""; }; 9B8DE0E2289CF7AA00FB6EC2 /* XPRoomGiftCompoundView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomGiftCompoundView.h; sourceTree = ""; }; @@ -1637,6 +1644,9 @@ 9BAA5FEC277A1BBE007453F3 /* XPPrivacyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPPrivacyViewController.m; sourceTree = ""; }; 9BAA5FEE277A23F4007453F3 /* XPPermissionsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPPermissionsViewController.h; sourceTree = ""; }; 9BAA5FEF277A23F4007453F3 /* XPPermissionsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPPermissionsViewController.m; sourceTree = ""; }; + 9BAD41AA28C6EB13005E47B3 /* XPInRoomRecordPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPInRoomRecordPresenter.h; sourceTree = ""; }; + 9BAD41AB28C6EB13005E47B3 /* XPInRoomRecordPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPInRoomRecordPresenter.m; sourceTree = ""; }; + 9BAD41AD28C6ECBA005E47B3 /* XPInRoomRecordProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPInRoomRecordProtocol.h; sourceTree = ""; }; 9BB549572782E6A30090CD26 /* XPNobleCenterPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPNobleCenterPresenter.h; sourceTree = ""; }; 9BB549582782E6A30090CD26 /* XPNobleCenterPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPNobleCenterPresenter.m; sourceTree = ""; }; 9BB5495A2782E79E0090CD26 /* NobleCenterModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NobleCenterModel.h; sourceTree = ""; }; @@ -7703,6 +7713,8 @@ E8F9168627EC927C00F10D8F /* XPHomeLittleGamePesenter.m */, 9B3353BC288156DB00AC2F24 /* XPHomeLivePresenter.h */, 9B3353BD288156DB00AC2F24 /* XPHomeLivePresenter.m */, + 9BAD41AA28C6EB13005E47B3 /* XPInRoomRecordPresenter.h */, + 9BAD41AB28C6EB13005E47B3 /* XPInRoomRecordPresenter.m */, ); path = Presenter; sourceTree = ""; @@ -7717,6 +7729,7 @@ E8A6C29C27CF53E100AC7442 /* XPHomeLikeProtocol.h */, E8F9168827EC928F00F10D8F /* XPHomeLittleGameProtocol.h */, 9B3353BF2881570400AC2F24 /* XPHomeLiveProtocol.h */, + 9BAD41AD28C6ECBA005E47B3 /* XPInRoomRecordProtocol.h */, ); path = Protocol; sourceTree = ""; @@ -7781,6 +7794,8 @@ E8C6FFDF2754EEF9004DC9F0 /* XPHomeSearchViewController.m */, E87A27012758BC81002DDC7A /* XPRoomSearchContainerViewController.h */, E87A27022758BC81002DDC7A /* XPRoomSearchContainerViewController.m */, + 9B88E20D28C6305400D26FBA /* XPRoomSearchRecordViewController.h */, + 9B88E20E28C6305400D26FBA /* XPRoomSearchRecordViewController.m */, ); path = View; sourceTree = ""; @@ -7829,6 +7844,8 @@ E8F9168A27EC940E00F10D8F /* XPHomeLittleGameTableViewCell.m */, 9B39C88728854AB300564D17 /* XPHomeLiveRecordCell.h */, 9B39C88828854AB300564D17 /* XPHomeLiveRecordCell.m */, + 9B88E21028C6365B00D26FBA /* XPHomeSearchRecordCell.h */, + 9B88E21128C6365B00D26FBA /* XPHomeSearchRecordCell.m */, ); path = Cell; sourceTree = ""; @@ -9040,6 +9057,7 @@ 189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */, E81EF6E4279AB92E00FF3EDE /* LittleGameInfoModel.m in Sources */, E87A26F927587C62002DDC7A /* XPHomeContainerPresenter.m in Sources */, + 9B88E21228C6365B00D26FBA /* XPHomeSearchRecordCell.m in Sources */, 18EE401A2754BA9F00A452BF /* NIMMessageMaker.m in Sources */, E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */, E82325E9274CE56A003A3332 /* XPShareItem.m in Sources */, @@ -9295,6 +9313,7 @@ 9B734F79288A9C4B00CBDAA9 /* XPMineGameTableViewCell.m in Sources */, E8664EDC27E43632000171BA /* XPRoomPKEmptyTableViewCell.m in Sources */, E880B3A9278BD82300A83B0D /* AcrossRoomPKInfoModel.m in Sources */, + 9B88E20F28C6305400D26FBA /* XPRoomSearchRecordViewController.m in Sources */, E82D5C7A276B25D100858D6D /* SpriteSheetImageManager.m in Sources */, E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */, 9B92A3662798132600AD168F /* XPSkillCardTypeView.m in Sources */, @@ -9621,6 +9640,7 @@ E8232600274E48EA003A3332 /* XPUserCardItemCollectionViewCell.m in Sources */, E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */, E8EEB8FB26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m in Sources */, + 9BAD41AC28C6EB13005E47B3 /* XPInRoomRecordPresenter.m in Sources */, E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */, 18EE3FDF2750C1F700A452BF /* SessionListCell.m in Sources */, 9BB549622782EA1D0090CD26 /* NobleInfo.m in Sources */, diff --git a/xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.h b/xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.h new file mode 100644 index 00000000..4b3f6cd7 --- /dev/null +++ b/xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.h @@ -0,0 +1,22 @@ +// +// XPInRoomRecordPresenter.h +// xplan-ios +// +// Created by GreenLand on 2022/9/6. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPInRoomRecordPresenter : BaseMvpPresenter + +///获取进房记录 +- (void)getInRoomRecordList; + +/// 清除进房记录 +- (void)cleanInRoomRecord; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.m b/xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.m new file mode 100644 index 00000000..098a7697 --- /dev/null +++ b/xplan-ios/Main/Home/Presenter/XPInRoomRecordPresenter.m @@ -0,0 +1,34 @@ +// +// XPInRoomRecordPresenter.m +// xplan-ios +// +// Created by GreenLand on 2022/9/6. +// + +#import "XPInRoomRecordPresenter.h" +#import "Api+Mine.h" +#import "AccountInfoStorage.h" +#import "XPMineFootPrintModel.h" +#import "XPInRoomRecordProtocol.h" + +@implementation XPInRoomRecordPresenter + +///获取进房记录 +- (void)getInRoomRecordList { + NSString *uid = [AccountInfoStorage instance].getUid; + [Api requestFootPrint:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + NSArray *array = [XPMineFootPrintModel modelsWithArray:data.data]; + [[self getView] getInRoomRecordSuccess:array]; + } fail:^(NSInteger code, NSString * _Nullable msg) { + }] uid:uid page:@"1" pageSize:@"100"]; +} + +/// 清除进房记录 +- (void)cleanInRoomRecord { + NSString *uid = [AccountInfoStorage instance].getUid; + [Api requestCleanFootPrint:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] cleanInRoomRecordSuccess]; + }] uid:uid]; +} + +@end diff --git a/xplan-ios/Main/Home/Protocol/XPInRoomRecordProtocol.h b/xplan-ios/Main/Home/Protocol/XPInRoomRecordProtocol.h new file mode 100644 index 00000000..62198747 --- /dev/null +++ b/xplan-ios/Main/Home/Protocol/XPInRoomRecordProtocol.h @@ -0,0 +1,30 @@ +// +// XPInRoomRecordProtocol.h +// xplan-ios +// +// Created by GreenLand on 2022/9/6. +// + +#import + +@class XPMineFootPrintModel; +@protocol XPInRoomRecordProtocol + +///获取个播浏览记录成功 +//- (void)getOnceLookRoomListSuccess:(HomeLiveLookRecordModel *)data; +// +/////获取所有的tag成功 +//- (void)getHomeLiveTagListSuccess:(NSArray *)array; +/////获取所有的tag失败 +//- (void)getHomeLiveTagListFail:(NSArray *)array; +// +/////获取个播房成功 +//- (void)getAnchorRoomListSuccess:(NSArray *)array; + +///获取进房记录成功 +- (void)getInRoomRecordSuccess:(NSArray *)array; + +///清除进房记录成功 +- (void)cleanInRoomRecordSuccess; + +@end diff --git a/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.h b/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.h index e0629a98..db01f3a6 100644 --- a/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.h +++ b/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.h @@ -8,9 +8,12 @@ #import NS_ASSUME_NONNULL_BEGIN -@class HomeLiveRoomModel; +@class HomeLiveRoomModel, XPMineFootPrintModel; @interface XPHomeAttentionCollectionViewCell : UICollectionViewCell + @property (nonatomic,strong) HomeLiveRoomModel *liveRoom; +@property (nonatomic, strong) XPMineFootPrintModel *recordRoom; + @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.m b/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.m index 288c911d..b7f0d796 100644 --- a/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.m +++ b/xplan-ios/Main/Home/View/Cell/XPHomeAttentionCollectionViewCell.m @@ -14,6 +14,7 @@ #import "UIImage+Utils.h" ///Model #import "HomeLiveRoomModel.h" +#import "XPMineFootPrintModel.h" @interface XPHomeAttentionCollectionViewCell () ///头像 @@ -99,6 +100,15 @@ } } +- (void)setRecordRoom:(XPMineFootPrintModel *)recordRoom { + _recordRoom = recordRoom; + if (recordRoom) { + self.avatarImageView.imageUrl = recordRoom.avatar; + self.nickLabel.text = recordRoom.title; + self.noteBgImageView.hidden = YES; + } +} + - (NetImageView *)avatarImageView { if (!_avatarImageView) { NetImageConfig * config = [[NetImageConfig alloc]init]; diff --git a/xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.h b/xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.h new file mode 100644 index 00000000..89d59f7f --- /dev/null +++ b/xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.h @@ -0,0 +1,18 @@ +// +// XPHomeSearchRecordCell.h +// xplan-ios +// +// Created by GreenLand on 2022/9/5. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPHomeSearchRecordCell : UICollectionViewCell + +@property (nonatomic, copy) NSString *recordString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.m b/xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.m new file mode 100644 index 00000000..8bd54f17 --- /dev/null +++ b/xplan-ios/Main/Home/View/Cell/XPHomeSearchRecordCell.m @@ -0,0 +1,51 @@ +// +// XPHomeSearchRecordCell.m +// xplan-ios +// +// Created by GreenLand on 2022/9/5. +// + +#import "XPHomeSearchRecordCell.h" +///Third +#import +///Tool +#import "ThemeColor.h" + +@interface XPHomeSearchRecordCell () + +///昵称 +@property (nonatomic,strong) UILabel *titleLabel; + +@end + +@implementation XPHomeSearchRecordCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + self.layer.cornerRadius = 13; + self.layer.masksToBounds = YES; + [self addSubview:self.titleLabel]; + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.mas_equalTo(self); + }]; + } + return self; +} +- (void)setRecordString:(NSString *)recordString { + self.titleLabel.text = recordString; +} + +#pragma mark - Getter & Setter +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.textColor = [ThemeColor mainTextColor]; + _titleLabel.font = [UIFont systemFontOfSize:12]; + } + return _titleLabel; +} + + +@end diff --git a/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.h b/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.h index 0b7bdf8e..ba27e014 100644 --- a/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.h +++ b/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.h @@ -14,6 +14,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)xPHomeSearchNavView:(XPHomeSearchNavView *)view didClickBack:(UIButton *)sender; ///点击了搜索 - (void)xPHomeSearchNavView:(XPHomeSearchNavView *)view didClickSearch:(UIButton *)sender; +///搜索框没有文字 +- (void)xPHomeSearchNavViewClearTextField:(XPHomeSearchNavView *)view; + @end @interface XPHomeSearchNavView : UIView diff --git a/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.m b/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.m index ba9d7437..89186fe0 100644 --- a/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.m +++ b/xplan-ios/Main/Home/View/SubViews/XPHomeSearchNavView.m @@ -30,12 +30,18 @@ @implementation XPHomeSearchNavView +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self initSubViews]; [self initSubViewConstraints]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChange:) name:UITextFieldTextDidChangeNotification object:nil]; } return self; } @@ -96,6 +102,16 @@ } } +- (void)textFieldChange:(NSNotification *)notification { + UITextField *textField = (UITextField *)notification.object; + NSString *searchStr = textField.text; + if (searchStr.length == 0) { + if (self.delegate && [self.delegate respondsToSelector:@selector(xPHomeSearchNavViewClearTextField:)]) { + [self.delegate xPHomeSearchNavViewClearTextField:self]; + } + } +} + #pragma mark - Getters And Setters - (UIButton *)backButton { diff --git a/xplan-ios/Main/Home/View/XPRoomSearchContainerViewController.m b/xplan-ios/Main/Home/View/XPRoomSearchContainerViewController.m index c4f709f7..58eff304 100644 --- a/xplan-ios/Main/Home/View/XPRoomSearchContainerViewController.m +++ b/xplan-ios/Main/Home/View/XPRoomSearchContainerViewController.m @@ -16,11 +16,12 @@ #import "XPHomeSearchNavView.h" ///View #import "XPHomeSearchViewController.h" +#import "XPRoomSearchRecordViewController.h" UIKIT_EXTERN NSString *kFromSearchToHomeViewKey; UIKIT_EXTERN NSString *kTabShowAnchorCardKey; -@interface XPRoomSearchContainerViewController () +@interface XPRoomSearchContainerViewController () ///分页标题 @property (nonatomic, strong) NSArray *titles; ///分页控件 @@ -33,6 +34,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; @property (nonatomic,strong) XPHomeSearchViewController *roomVC; ///用户 @property (nonatomic,strong) XPHomeSearchViewController *userVC; +///进房、搜索记录 +@property (nonatomic, strong) XPRoomSearchRecordViewController *recordVc; + @end @implementation XPRoomSearchContainerViewController @@ -53,6 +57,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; [self.view addSubview:self.searchView]; [self.view addSubview:self.titleView]; [self.view addSubview:self.contentView]; + [self.view addSubview:self.recordVc.view]; + [self addChildViewController:self.recordVc]; } - (void)initSubViewConstraints { @@ -71,6 +77,11 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; make.top.mas_equalTo(self.titleView.mas_bottom).offset(10); make.left.right.bottom.mas_equalTo(self.view); }]; + [self.recordVc.view mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view); + make.top.mas_equalTo(self.searchView.mas_bottom); + make.bottom.mas_equalTo(self.view); + }]; } - (void)searchVCLoadData:(NSString *)text { @@ -95,6 +106,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; if (textField.text.length > 0) { [textField resignFirstResponder]; [self searchVCLoadData:textField.text]; + [self.recordVc storeSearchRecord:textField.text]; + self.recordVc.view.hidden = YES; } else { [self showErrorToast:@"请输入需要搜索的内容"]; } @@ -106,6 +119,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; if (view.searchTextField.text.length > 0) { [view.searchTextField resignFirstResponder]; [self searchVCLoadData:view.searchTextField.text]; + [self.recordVc storeSearchRecord:view.searchTextField.text]; + self.recordVc.view.hidden = YES; } else { [self showErrorToast:@"请输入需要搜索的内容"]; } @@ -122,6 +137,24 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; [self dismissViewControllerAnimated:YES completion:nil]; } +///搜索框没有文字 +- (void)xPHomeSearchNavViewClearTextField:(XPHomeSearchNavView *)view { + self.recordVc.view.hidden = NO; + [self.recordVc updateSearchRecord]; +} + +#pragma mark - XPRoomSearchRecordViewControllerDelegate +- (void)xPRoomSearchRecordViewControllerSearchWithWord:(NSString *)word { + if (word.length > 0) { + self.searchView.searchTextField.text = word; + [self searchVCLoadData:word]; + [self.recordVc storeSearchRecord:word]; + self.recordVc.view.hidden = YES; + } else { + [self showErrorToast:@"请输入需要搜索的内容"]; + } +} + #pragma mark - Getters And Setters - (JXCategoryTitleView *)titleView { if (!_titleView) { @@ -184,4 +217,12 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; return _userVC; } +- (XPRoomSearchRecordViewController *)recordVc { + if (!_recordVc) { + _recordVc = [[XPRoomSearchRecordViewController alloc] init]; + _recordVc.delegate = self; + } + return _recordVc; +} + @end diff --git a/xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.h b/xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.h new file mode 100644 index 00000000..933cfd63 --- /dev/null +++ b/xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.h @@ -0,0 +1,29 @@ +// +// XPRoomSearchRecordViewController.h +// xplan-ios +// +// Created by GreenLand on 2022/9/5. +// + +#import "MvpViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol XPRoomSearchRecordViewControllerDelegate + +- (void)xPRoomSearchRecordViewControllerSearchWithWord:(NSString *)word; + +@end + +@interface XPRoomSearchRecordViewController : MvpViewController + +@property (nonatomic, weak) id delegate; +/// 保存搜索记录 +- (void)storeSearchRecord:(NSString *)record; + +///更新搜索记录 +- (void)updateSearchRecord; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.m b/xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.m new file mode 100644 index 00000000..50ccac6c --- /dev/null +++ b/xplan-ios/Main/Home/View/XPRoomSearchRecordViewController.m @@ -0,0 +1,349 @@ +// +// XPRoomSearchRecordViewController.m +// xplan-ios +// +// Created by GreenLand on 2022/9/5. +// + +#import "XPRoomSearchRecordViewController.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "AccountInfoStorage.h" +#import "TTPopup.h" +///View +#import "XPHomeAttentionCollectionViewCell.h" +#import "XPHomeSearchRecordCell.h" +#import "XPRoomViewController.h" +#import "XPMineUserInfoViewController.h" +///P +#import "XPInRoomRecordPresenter.h" +#import "XPInRoomRecordProtocol.h" +///Model +#import "XPMineFootPrintModel.h" + +NSString * const XPConstSearchRecordStoreKey = @"XPConstSearchRecordStoreKey"; + +@interface XPRoomSearchRecordViewController () + +@property (nonatomic, strong) UILabel *recordTitle; +@property (nonatomic, strong) UIButton *clearRecordBtn; +@property (nonatomic, strong) UILabel *roomTitle; +@property (nonatomic, strong) UIButton *clearRoomBtn; +///列表 +@property (nonatomic, strong) UICollectionView *searchCollectionView; + +@property (nonatomic, strong) UICollectionView *roomCollectionView; +///数据源 +@property (nonatomic, strong) NSMutableArray *searchList; + +@property (nonatomic, strong) NSMutableArray *inRoomList; + +@end + +@implementation XPRoomSearchRecordViewController + +- (XPInRoomRecordPresenter *)createPresenter { + return [[XPInRoomRecordPresenter alloc] init]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self initSubViews]; + [self initSubViewConstraints]; + [self initSearchRecordData]; + [self.presenter getInRoomRecordList]; +} + +- (void)initSearchRecordData { + [self.searchList removeAllObjects]; + NSArray *array = [self searchRecordList]; + [self.searchList addObjectsFromArray:array]; + [self.searchCollectionView reloadData]; + if (array.count) { + + } else { + + } +} + +- (void)viewWillLayoutSubviews { + [super viewWillLayoutSubviews]; + +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + [self.view endEditing:YES]; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self.view addSubview:self.recordTitle]; + [self.view addSubview:self.clearRecordBtn]; + [self.view addSubview:self.searchCollectionView]; + [self.view addSubview:self.roomTitle]; + [self.view addSubview:self.clearRoomBtn]; + [self.view addSubview:self.roomCollectionView]; +} + +- (void)initSubViewConstraints { + [self.recordTitle mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(16); + make.top.mas_equalTo(10); + make.height.mas_equalTo(20); + }]; + [self.clearRecordBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(-16); + make.centerY.mas_equalTo(self.recordTitle); + make.width.height.mas_equalTo(30); + }]; + [self.searchCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view); + make.height.mas_equalTo(26); + make.top.mas_equalTo(self.recordTitle.mas_bottom).mas_offset(8); + }]; + + [self.roomTitle mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(16); + make.top.mas_equalTo(self.searchCollectionView.mas_bottom).mas_offset(24); + make.height.mas_equalTo(20); + }]; + [self.clearRoomBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(-16); + make.centerY.mas_equalTo(self.roomTitle); + make.width.height.mas_equalTo(30); + }]; + [self.roomCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view); + make.height.mas_equalTo(75); + make.top.mas_equalTo(self.roomTitle.mas_bottom).mas_offset(8); + }]; +} + +#pragma mark - UICollectionViewDelegate +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + if (collectionView == self.searchCollectionView) { + return self.searchList.count; + } else { + return self.inRoomList.count; + } +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.searchCollectionView) { + XPHomeSearchRecordCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPHomeSearchRecordCell class]) forIndexPath:indexPath]; + cell.recordString = [self.searchList objectAtIndex:indexPath.row]; + return cell; + } else { + XPHomeAttentionCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPHomeAttentionCollectionViewCell class]) forIndexPath:indexPath]; + cell.recordRoom = self.inRoomList[indexPath.row]; + return cell; + } +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.searchCollectionView) { + NSString *str = self.searchList[indexPath.row]; + if (self.delegate && [self.delegate respondsToSelector:@selector(xPRoomSearchRecordViewControllerSearchWithWord:)]) { + [self.delegate xPRoomSearchRecordViewControllerSearchWithWord:str]; + } + } else { + XPMineFootPrintModel *resultModel = self.inRoomList[indexPath.row]; + [self dismissViewControllerAnimated:YES completion:nil]; + if (resultModel.valid) { + [XPRoomViewController openRoom:resultModel.roomUid viewController:self.presentingViewController]; + } else { + XPMineUserInfoViewController * infoVC = [[XPMineUserInfoViewController alloc] init]; + infoVC.uid = resultModel.roomUid.integerValue; + [(UINavigationController *)self.presentingViewController pushViewController:infoVC animated:YES]; + } + } +} + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.searchCollectionView) { + NSString *str = [self.searchList objectAtIndex:indexPath.row]; + CGFloat width = [str boundingRectWithSize:CGSizeMake(200, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]} context:nil].size.width; + return CGSizeMake(width + 26, 26); + } else { + return CGSizeMake(56, 75); + } +} + + +#pragma mark - 搜索记录操作 +/// 获取搜索记录 +- (NSArray *)searchRecordList { + NSString *key = [NSString stringWithFormat:@"%@_%@", XPConstSearchRecordStoreKey, [AccountInfoStorage instance].getUid]; + NSArray *list = [[NSUserDefaults standardUserDefaults] objectForKey:key]; + return list; +} + +/// 保存搜索记录 +- (void)storeSearchRecord:(NSString *)record { + if (record == nil || record.length <= 0) { + return; + } + NSString *key = [NSString stringWithFormat:@"%@_%@", XPConstSearchRecordStoreKey, [AccountInfoStorage instance].getUid]; + NSMutableArray *list = [[[NSUserDefaults standardUserDefaults] objectForKey:key] mutableCopy]; + if (list == nil) { + list = [[NSMutableArray alloc] init]; + } + + [list removeObject:record];//去重 + [list insertObject:record atIndex:0];//插入 + + if (list.count > 20) {//最多保存20条记录 + [list removeLastObject]; + } + + [[NSUserDefaults standardUserDefaults] setValue:list forKey:key]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +/// 清空搜索记录 +- (void)cleanSearchRecord { + NSString *key = [NSString stringWithFormat:@"%@_%@", XPConstSearchRecordStoreKey, [AccountInfoStorage instance].getUid]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)updateSearchRecord { + [self initSearchRecordData]; +} + +///获取进房记录成功 +- (void)getInRoomRecordSuccess:(NSArray *)array { + [self.inRoomList removeAllObjects]; + [self.inRoomList addObjectsFromArray:array]; + [self.roomCollectionView reloadData]; +} + +///清除进房记录成功 +- (void)cleanInRoomRecordSuccess { + [self.inRoomList removeAllObjects]; + [self.roomCollectionView reloadData]; +} + +#pragma mark - action +- (void)onClearSearchRecordClick:(UIButton *)sender { + TTAlertConfig * config = [[TTAlertConfig alloc] init]; + config.confirmButtonConfig.title = @"清空"; + config.cancelButtonConfig.title = @"手滑了"; + config.message = @"确定清空搜索记录吗?"; + [TTPopup alertWithConfig:config confirmHandler:^{ + [self cleanSearchRecord]; + [self.searchList removeAllObjects]; + [self.searchCollectionView reloadData]; + } cancelHandler:^{ + }]; +} + +- (void)onClearRoomClick:(UIButton *)sender { + TTAlertConfig * config = [[TTAlertConfig alloc] init]; + config.confirmButtonConfig.title = @"清空"; + config.cancelButtonConfig.title = @"手滑了"; + config.message = @"确定清空进房记录吗?"; + [TTPopup alertWithConfig:config confirmHandler:^{ + [self.presenter cleanInRoomRecord]; + } cancelHandler:^{ + }]; +} + +#pragma mark - getter +- (UILabel *)recordTitle { + if (!_recordTitle) { + UILabel *label = [[UILabel alloc] init]; + label.text = @"搜索记录"; + label.font = [UIFont systemFontOfSize:14 weight:UIFontWeightBold]; + label.textColor = [ThemeColor mainTextColor]; + _recordTitle = label; + } + return _recordTitle; +} + +- (UILabel *)roomTitle { + if (!_roomTitle) { + UILabel *label = [[UILabel alloc] init]; + label.text = @"进房记录"; + label.font = [UIFont systemFontOfSize:14 weight:UIFontWeightBold]; + label.textColor = [ThemeColor mainTextColor]; + _roomTitle = label; + } + return _roomTitle; +} + +- (UIButton *)clearRecordBtn { + if (!_clearRecordBtn) { + UIButton *btn = [[UIButton alloc] init]; + [btn setImage:[UIImage imageNamed:@"sessionList_clear"] forState:UIControlStateNormal]; + [btn addTarget:self action:@selector(onClearSearchRecordClick:) forControlEvents:UIControlEventTouchUpInside]; + _clearRecordBtn = btn; + } + return _clearRecordBtn; +} + +- (UIButton *)clearRoomBtn { + if (!_clearRoomBtn) { + UIButton *btn = [[UIButton alloc] init]; + [btn setImage:[UIImage imageNamed:@"sessionList_clear"] forState:UIControlStateNormal]; + [btn addTarget:self action:@selector(onClearRoomClick:) forControlEvents:UIControlEventTouchUpInside]; + _clearRoomBtn = btn; + } + return _clearRoomBtn; +} + +- (UICollectionView *)searchCollectionView{ + if (!_searchCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.minimumLineSpacing = 8; + layout.minimumInteritemSpacing = 8; + layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15); + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _searchCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _searchCollectionView.showsHorizontalScrollIndicator = NO; + _searchCollectionView.dataSource = self; + _searchCollectionView.delegate = self; + _searchCollectionView.backgroundColor = [UIColor clearColor]; + [_searchCollectionView registerClass:[XPHomeSearchRecordCell class] forCellWithReuseIdentifier:NSStringFromClass([XPHomeSearchRecordCell class])]; + } + return _searchCollectionView; +} + +- (UICollectionView *)roomCollectionView{ + if (!_roomCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.minimumLineSpacing = 8; + layout.minimumInteritemSpacing = 0; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15); + _roomCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _roomCollectionView.showsHorizontalScrollIndicator = NO; + _roomCollectionView.dataSource = self; + _roomCollectionView.delegate = self; + _roomCollectionView.backgroundColor = [UIColor clearColor]; + [_roomCollectionView registerClass:[XPHomeAttentionCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPHomeAttentionCollectionViewCell class])]; + } + return _roomCollectionView; +} + +- (NSMutableArray *)searchList { + if (!_searchList) { + _searchList = [NSMutableArray array]; + } + return _searchList; +} + +- (NSMutableArray *)inRoomList { + if (!_inRoomList) { + _inRoomList = [NSMutableArray array]; + } + return _inRoomList; +} + +@end