From ec5f87ae2755bdf9feee89dfeccbd3db1d66111c Mon Sep 17 00:00:00 2001 From: Zhang Guangqun Date: Fri, 16 Apr 2021 10:25:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=81=94=E7=B3=BB=E4=BA=BA=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- WeChat/SnapShot/contactInfo.png | Bin 0 -> 90422 bytes WeChat/WeChat.xcodeproj/project.pbxproj | 92 ++++++++++++++ .../Contact_Female_18x18.png | Bin 0 -> 871 bytes .../Contents.json | 21 ++++ .../Contact_Male_18x18.png | Bin 0 -> 832 bytes .../Contact_Male_18x18.imageset/Contents.json | 21 ++++ .../Assets.xcassets/Contacts/Contents.json | 6 +- .../Pictures/Contact/icons_outlined_chats.svg | 12 ++ .../Contact/icons_outlined_videocall.svg | 10 ++ WeChat/WeChat/Utils/Router/MHRouter.m | 1 + .../ContactInfo/MHContactInfoContactCell.h | 21 ++++ .../ContactInfo/MHContactInfoContactCell.m | 48 +++++++ .../ContactInfo/MHContactInfoContactCell.xib | 62 ++++++++++ .../ContactInfo/MHContactInfoHeaderCell.h | 21 ++++ .../ContactInfo/MHContactInfoHeaderCell.m | 57 +++++++++ .../ContactInfo/MHContactInfoHeaderCell.xib | 117 ++++++++++++++++++ .../ContactInfo/MHContactInfoViewController.h | 17 +++ .../ContactInfo/MHContactInfoViewController.m | 64 ++++++++++ .../MHContactInfoContactItemViewModel.h | 23 ++++ .../MHContactInfoContactItemViewModel.m | 26 ++++ .../MHContactInfoHeaderViewModel.h | 22 ++++ .../MHContactInfoHeaderViewModel.m | 24 ++++ .../ContactInfo/MHContactInfoViewModel.h | 19 +++ .../ContactInfo/MHContactInfoViewModel.m | 60 +++++++++ .../ViewModel/Contacts/MHContactsViewModel.m | 15 +++ 26 files changed, 757 insertions(+), 4 deletions(-) create mode 100644 WeChat/SnapShot/contactInfo.png create mode 100644 WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contact_Female_18x18.png create mode 100644 WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contents.json create mode 100644 WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contact_Male_18x18.png create mode 100644 WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contents.json create mode 100644 WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_chats.svg create mode 100644 WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_videocall.svg create mode 100644 WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.h create mode 100644 WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.m create mode 100644 WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.xib create mode 100644 WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.h create mode 100644 WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.m create mode 100644 WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.xib create mode 100644 WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.h create mode 100644 WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.m create mode 100644 WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.h create mode 100644 WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.m create mode 100644 WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.h create mode 100644 WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.m create mode 100644 WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.h create mode 100644 WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.m diff --git a/README.md b/README.md index 85bc819..d511c55 100755 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ ###### 🏳️‍🌈 通讯录模块 -| ![](https://github.com/CoderMikeHe/WeChat_Resource/blob/master/snapshots/contacts/ios_contacts_page_0.png) | ![](https://github.com/CoderMikeHe/WeChat_Resource/blob/master/snapshots/contacts/ios_contacts_page_1.png) | 虚位以待 | 虚位以待 | +| ![](https://github.com/CoderMikeHe/WeChat_Resource/blob/master/snapshots/contacts/ios_contacts_page_0.png) | ![](https://github.com/CoderMikeHe/WeChat_Resource/blob/master/snapshots/contacts/ios_contacts_page_1.png) | ![](./WeChat/SnapShot/contactInfo.png) | 虚位以待 | | :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | :------: | :------: | diff --git a/WeChat/SnapShot/contactInfo.png b/WeChat/SnapShot/contactInfo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6c7983e65f1cc2add5d0fde333bbebf6d8f390 GIT binary patch literal 90422 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

vlgs2zf`F$g-zST9Nw_WP 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 literal 0 HcmV?d00001 diff --git a/WeChat/WeChat.xcodeproj/project.pbxproj b/WeChat/WeChat.xcodeproj/project.pbxproj index 60e79e6..d9030af 100644 --- a/WeChat/WeChat.xcodeproj/project.pbxproj +++ b/WeChat/WeChat.xcodeproj/project.pbxproj @@ -301,6 +301,16 @@ 26FE8E911F9514D100EC8BE0 /* TZProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 26FE8E791F9514D100EC8BE0 /* TZProgressView.m */; }; 26FE8E921F9514D100EC8BE0 /* TZVideoPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 26FE8E7B1F9514D100EC8BE0 /* TZVideoPlayerController.m */; }; 26FE8E931F9514D100EC8BE0 /* UIView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 26FE8E7D1F9514D100EC8BE0 /* UIView+Layout.m */; }; + 41F874A62626CED100FCBBF0 /* MHContactInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F874A52626CED100FCBBF0 /* MHContactInfoViewController.m */; }; + 41F874AA2626CF5600FCBBF0 /* MHContactInfoViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F874A92626CF5600FCBBF0 /* MHContactInfoViewModel.m */; }; + 41F874AF2627E71200FCBBF0 /* MHContactInfoHeaderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F874AD2627E71200FCBBF0 /* MHContactInfoHeaderCell.m */; }; + 41F874B02627E71200FCBBF0 /* MHContactInfoHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41F874AE2627E71200FCBBF0 /* MHContactInfoHeaderCell.xib */; }; + 41F874B32627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F874B22627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.m */; }; + 41F874B62629192700FCBBF0 /* MHContactInfoContactItemViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F874B52629192700FCBBF0 /* MHContactInfoContactItemViewModel.m */; }; + 41F874BA26291A9A00FCBBF0 /* icons_outlined_chats.svg in Resources */ = {isa = PBXBuildFile; fileRef = 41F874B826291A9A00FCBBF0 /* icons_outlined_chats.svg */; }; + 41F874BB26291A9A00FCBBF0 /* icons_outlined_videocall.svg in Resources */ = {isa = PBXBuildFile; fileRef = 41F874B926291A9A00FCBBF0 /* icons_outlined_videocall.svg */; }; + 41F874BF26291D3800FCBBF0 /* MHContactInfoContactCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F874BD26291D3700FCBBF0 /* MHContactInfoContactCell.m */; }; + 41F874C026291D3800FCBBF0 /* MHContactInfoContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41F874BE26291D3700FCBBF0 /* MHContactInfoContactCell.xib */; }; 8400E2E924A86DCC00125893 /* MHPulldownAppletViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8400E2E824A86DCC00125893 /* MHPulldownAppletViewController.m */; }; 8400E2ED24A870E800125893 /* MHPulldownAppletViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8400E2EC24A870E800125893 /* MHPulldownAppletViewModel.m */; }; 8400E2F124A897B300125893 /* MHPulldownAppletCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8400E2F024A897B300125893 /* MHPulldownAppletCell.m */; }; @@ -1168,6 +1178,22 @@ 26FE8E7B1F9514D100EC8BE0 /* TZVideoPlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZVideoPlayerController.m; sourceTree = ""; }; 26FE8E7C1F9514D100EC8BE0 /* UIView+Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Layout.h"; sourceTree = ""; }; 26FE8E7D1F9514D100EC8BE0 /* UIView+Layout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Layout.m"; sourceTree = ""; }; + 41F874A42626CED100FCBBF0 /* MHContactInfoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MHContactInfoViewController.h; sourceTree = ""; }; + 41F874A52626CED100FCBBF0 /* MHContactInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MHContactInfoViewController.m; sourceTree = ""; }; + 41F874A82626CF5600FCBBF0 /* MHContactInfoViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MHContactInfoViewModel.h; sourceTree = ""; }; + 41F874A92626CF5600FCBBF0 /* MHContactInfoViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MHContactInfoViewModel.m; sourceTree = ""; }; + 41F874AC2627E71200FCBBF0 /* MHContactInfoHeaderCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MHContactInfoHeaderCell.h; sourceTree = ""; }; + 41F874AD2627E71200FCBBF0 /* MHContactInfoHeaderCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MHContactInfoHeaderCell.m; sourceTree = ""; }; + 41F874AE2627E71200FCBBF0 /* MHContactInfoHeaderCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MHContactInfoHeaderCell.xib; sourceTree = ""; }; + 41F874B12627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MHContactInfoHeaderViewModel.h; sourceTree = ""; }; + 41F874B22627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MHContactInfoHeaderViewModel.m; sourceTree = ""; }; + 41F874B42629192700FCBBF0 /* MHContactInfoContactItemViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MHContactInfoContactItemViewModel.h; sourceTree = ""; }; + 41F874B52629192700FCBBF0 /* MHContactInfoContactItemViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MHContactInfoContactItemViewModel.m; sourceTree = ""; }; + 41F874B826291A9A00FCBBF0 /* icons_outlined_chats.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = icons_outlined_chats.svg; sourceTree = ""; }; + 41F874B926291A9A00FCBBF0 /* icons_outlined_videocall.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = icons_outlined_videocall.svg; sourceTree = ""; }; + 41F874BC26291D3700FCBBF0 /* MHContactInfoContactCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MHContactInfoContactCell.h; sourceTree = ""; }; + 41F874BD26291D3700FCBBF0 /* MHContactInfoContactCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MHContactInfoContactCell.m; sourceTree = ""; }; + 41F874BE26291D3700FCBBF0 /* MHContactInfoContactCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MHContactInfoContactCell.xib; sourceTree = ""; }; 5199ACCDE3914E9780CBE096 /* Pods-WeChat-WeChatUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeChat-WeChatUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WeChat-WeChatUITests/Pods-WeChat-WeChatUITests.debug.xcconfig"; sourceTree = ""; }; 5F007961429C86520F15C504 /* Pods_WeChat_WeChatUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WeChat_WeChatUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6AC95F3A9ABF83B9A3CDD57C /* Pods-WeChat-WeChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeChat-WeChatTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WeChat-WeChatTests/Pods-WeChat-WeChatTests.debug.xcconfig"; sourceTree = ""; }; @@ -1868,6 +1894,7 @@ 26064AF21F5DB46500566B95 /* Contacts */ = { isa = PBXGroup; children = ( + 41F874A32626CA4100FCBBF0 /* ContactInfo */, 2658C68B1F74FC3600C70840 /* AddFriends */, 2605C5D11F6632AA00B1F66E /* MHContactsViewController.h */, 2605C5D21F6632AA00B1F66E /* MHContactsViewController.m */, @@ -2265,6 +2292,7 @@ 26225D7C1F65506E0074BFC3 /* Contacts */ = { isa = PBXGroup; children = ( + 41F874A72626CF1E00FCBBF0 /* ContactInfo */, 84CBFE2C245AA69D00054D07 /* ItemViewModel */, 2658C68F1F74FFC400C70840 /* AddFriends */, 2605C5D41F6633AC00B1F66E /* MHContactsViewModel.h */, @@ -2601,6 +2629,7 @@ 263C896D1F6A305100F7A0AE /* Contacts */ = { isa = PBXGroup; children = ( + 41F874AB2627E6B800FCBBF0 /* ContactInfo */, 263004D01F751F7000247F3D /* AddFriends */, DEA6F3D2245AF3E200542C6B /* MHContactsHeaderView.h */, DEA6F3D3245AF3E200542C6B /* MHContactsHeaderView.m */, @@ -3084,6 +3113,7 @@ 2667A3EF1F7B987600A3D7A2 /* Pictures */ = { isa = PBXGroup; children = ( + 41F874B726291A5500FCBBF0 /* Contact */, 8449E2AB2485069A00F81CE1 /* Moments */, 840C5D78248107F7002E88F0 /* Profile */, 840C5D4F2480F27B002E88F0 /* Discover */, @@ -3399,6 +3429,50 @@ path = TZImagePickerController; sourceTree = ""; }; + 41F874A32626CA4100FCBBF0 /* ContactInfo */ = { + isa = PBXGroup; + children = ( + 41F874A42626CED100FCBBF0 /* MHContactInfoViewController.h */, + 41F874A52626CED100FCBBF0 /* MHContactInfoViewController.m */, + ); + path = ContactInfo; + sourceTree = ""; + }; + 41F874A72626CF1E00FCBBF0 /* ContactInfo */ = { + isa = PBXGroup; + children = ( + 41F874A82626CF5600FCBBF0 /* MHContactInfoViewModel.h */, + 41F874A92626CF5600FCBBF0 /* MHContactInfoViewModel.m */, + 41F874B12627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.h */, + 41F874B22627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.m */, + 41F874B42629192700FCBBF0 /* MHContactInfoContactItemViewModel.h */, + 41F874B52629192700FCBBF0 /* MHContactInfoContactItemViewModel.m */, + ); + path = ContactInfo; + sourceTree = ""; + }; + 41F874AB2627E6B800FCBBF0 /* ContactInfo */ = { + isa = PBXGroup; + children = ( + 41F874AC2627E71200FCBBF0 /* MHContactInfoHeaderCell.h */, + 41F874AD2627E71200FCBBF0 /* MHContactInfoHeaderCell.m */, + 41F874AE2627E71200FCBBF0 /* MHContactInfoHeaderCell.xib */, + 41F874BC26291D3700FCBBF0 /* MHContactInfoContactCell.h */, + 41F874BD26291D3700FCBBF0 /* MHContactInfoContactCell.m */, + 41F874BE26291D3700FCBBF0 /* MHContactInfoContactCell.xib */, + ); + path = ContactInfo; + sourceTree = ""; + }; + 41F874B726291A5500FCBBF0 /* Contact */ = { + isa = PBXGroup; + children = ( + 41F874B826291A9A00FCBBF0 /* icons_outlined_chats.svg */, + 41F874B926291A9A00FCBBF0 /* icons_outlined_videocall.svg */, + ); + path = Contact; + sourceTree = ""; + }; 8400E2E324A84B3800125893 /* PulldownApplet */ = { isa = PBXGroup; children = ( @@ -4560,6 +4634,7 @@ 84E8D5A124B5712D002289CA /* ele_sunnyBird2.png in Resources */, 84E8D5A724B5712D002289CA /* ele_night_sky_top.png in Resources */, 26A7E7421F79FE550015CA71 /* MHBootLoginViewController.xib in Resources */, + 41F874B02627E71200FCBBF0 /* MHContactInfoHeaderCell.xib in Resources */, 263004D51F751FB800247F3D /* MHSearchFriendsHeaderView.xib in Resources */, 84B0F64024777C310075D576 /* MHSearchDefaultNoResultCell.xib in Resources */, 842D242C246A2D60008E5A2C /* MHSearchOfficialAccountsDefaultCell.xib in Resources */, @@ -4587,6 +4662,7 @@ 84CBFE40245ACDF900054D07 /* MHContactsTableViewCell.xib in Resources */, 26D81813201F308A00DDB286 /* MHProfileInfoAlbumCell.xib in Resources */, 840C5D8424811093002E88F0 /* icons_outlined_colorful_cards_dark.svg in Resources */, + 41F874BA26291A9A00FCBBF0 /* icons_outlined_chats.svg in Resources */, 266E15DA1F8F7E7E000E31C5 /* MHCommitViewController.xib in Resources */, 264F2D171F94A80F00B244AD /* MHPlugDetailViewController.xib in Resources */, 84CFE09A246D33E2004C8739 /* icons_outlined_delete.svg in Resources */, @@ -4668,6 +4744,7 @@ 84E8D5BB24B5712D002289CA /* ele_white_cloud_9.png in Resources */, 2618AFE01F91BDA300F82A46 /* MHModifyNicknameViewController.xib in Resources */, 84A5457624752CBF0020FEE7 /* MHSearchDefaultContactCell.xib in Resources */, + 41F874C026291D3800FCBBF0 /* MHContactInfoContactCell.xib in Resources */, 8495D09224653FD3005B98B2 /* icons_filled_voiceinput_white.svg in Resources */, DE442177244C547400206161 /* icons_outlined_add2.svg in Resources */, 84E8D5AC24B5712D002289CA /* ele_sunnyNightStar2.png in Resources */, @@ -4690,6 +4767,7 @@ 84E8D59924B5712D002289CA /* ele_sunnyBird4.png in Resources */, 8417666C24726C4200B2A704 /* icons_add_expression.svg in Resources */, 84E8D5C024B5712D002289CA /* ele_sunnyBirdInvertedImage8.png in Resources */, + 41F874BB26291A9A00FCBBF0 /* icons_outlined_videocall.svg in Resources */, 2667A3EA1F7B7B0A00A3D7A2 /* MHMobileLoginView.xib in Resources */, 84012FFC24AC6F6200D60A89 /* MHPulldownAppletHeaderView.xib in Resources */, ); @@ -5178,6 +5256,7 @@ 2638C5AD20450DC300C334E2 /* UIImage+ImageEffects.m in Sources */, 263D370E1F666569007267C3 /* LCActionSheet.m in Sources */, 261753141F73710000812E1B /* MHUserInfoViewController.m in Sources */, + 41F874B32627EEB100FCBBF0 /* MHContactInfoHeaderViewModel.m in Sources */, 84399F4C24D913270062087E /* MHVideoTrendsViewController.m in Sources */, 84A1BF24246E83D3008A807C /* MHSearchMusicDelHistoryItemViewModel.m in Sources */, 2615266B1F6AE17400400BA0 /* MHTabBar.m in Sources */, @@ -5259,6 +5338,7 @@ 2633E01D1FEA07E300D0E187 /* MHSegmentedControlViewModel.m in Sources */, 2633E0301FEA0A9800D0E187 /* MHMoreEmotionViewModel.m in Sources */, 263D37141F666569007267C3 /* YYGestureRecognizer.m in Sources */, + 41F874A62626CED100FCBBF0 /* MHContactInfoViewController.m in Sources */, 26A7E7451F79FEB00015CA71 /* MHBootLoginViewModel.m in Sources */, 2615974D1FEA5DD300C6FD80 /* MHMomentHeaderView.m in Sources */, 849393232462A49300CC591B /* MHSearchViewModel.m in Sources */, @@ -5341,6 +5421,7 @@ 263D37131F666569007267C3 /* YYFileHash.m in Sources */, 263C897E1F6A324700F7A0AE /* MHCommonCell.m in Sources */, 26FE65651F92F90600642615 /* MHGenderViewModel.m in Sources */, + 41F874B62629192700FCBBF0 /* MHContactInfoContactItemViewModel.m in Sources */, 2615974E1FEA5DD300C6FD80 /* MHMomentMessageTipsView.m in Sources */, 260175821FE904BE000F6A25 /* MHGeneralViewModel.m in Sources */, 263D36E11F666438007267C3 /* NSObject+MHAlert.m in Sources */, @@ -5388,6 +5469,7 @@ 263C89781F6A30E600F7A0AE /* MHCommonItemViewModel.m in Sources */, 26064AFC1F5DB52900566B95 /* MHNavigationControllerStack.m in Sources */, 2605E1061FE7924900F514B0 /* MHPrivacyViewController.m in Sources */, + 41F874BF26291D3800FCBBF0 /* MHContactInfoContactCell.m in Sources */, 84CBFE38245AC7FD00054D07 /* MHView.m in Sources */, 2615975B1FEA5F5700C6FD80 /* MHControl.m in Sources */, 26363ACF201346E6000061EF /* MHEmoticonGroup.m in Sources */, @@ -5439,6 +5521,7 @@ 2633E02A1FEA097A00D0E187 /* MHMoreEmotionViewController.m in Sources */, 263D36DB1F666438007267C3 /* LCActionSheet+MHExtension.m in Sources */, 2605C5BE1F662EE400B1F66E /* MHMainFrameViewModel.m in Sources */, + 41F874AF2627E71200FCBBF0 /* MHContactInfoHeaderCell.m in Sources */, 84C29D1F246534A600C0F729 /* MHSearchVoiceInputView.m in Sources */, 265B4EC61F8DEF54004AEE5F /* MHSettingViewController.m in Sources */, DE6EF1D3246D85EF00FF1303 /* MHSearchCommonRelatedItemViewModel.m in Sources */, @@ -5515,6 +5598,7 @@ 2667A3F51F7B9FB100A3D7A2 /* MHMobileLoginViewController.m in Sources */, 84AD506124639BFD0053A79A /* MHSearchDefaultSearchTypeItemViewModel.m in Sources */, 263D36E71F666438007267C3 /* UIAlertController+MHColor.m in Sources */, + 41F874AA2626CF5600FCBBF0 /* MHContactInfoViewModel.m in Sources */, 2624CAED1F98DFC80083923F /* MHHTTPRequest.m in Sources */, 84E8D58C24B5712D002289CA /* WHWeatherSunView.m in Sources */, 26C7BEEE1F8CCA2C00525126 /* MHHTTPService.m in Sources */, @@ -5625,6 +5709,10 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ( + "-Xclang", + "-fcompatibility-qualified-id-block-type-checking", + ); SDKROOT = iphoneos; }; name = Debug; @@ -5674,6 +5762,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = ( + "-Xclang", + "-fcompatibility-qualified-id-block-type-checking", + ); SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; diff --git a/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contact_Female_18x18.png b/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contact_Female_18x18.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d0c045f809289cd2801e57dfd3ccbef9e44762 GIT binary patch literal 871 zcmV-t1DO1YP)Px&AxT6*R9Fe^S50UWK@@(oN%KQ>%pa($(saOvl#NtiG9z-fwtco66DAa?ZE!EOmnl$NVcgHu;4GBBDnOW3>WFYL! zd*AooH*aQkCjiw}t-ya)0pfQ)nPmJ3v)Dz(U>}b`2z($KxmueTp7I;B5J#2F#>Z>Y zOJ8mQgEK-dfjhCLmUE=PKQHuGFlrV24tHj0Y1CB=N2Acp^4Bp3QPQBaWa(tQ8%*|` z;R<=hM<;^-IUGw2zwp9|d`cB!CY-G#h9}_|juj=WWb>S9DVb5aBg3o}##pG-?$#%S z=(R*^Ae8=a!-(wC71{#mloi7haV+PEl6u*s1zBKqcm)#q{BWcN5ylGd8&P66n;(v} zAl#|Sg8Xo#1Z7gGMm#xe8TT8Xv{0$3Usg?&B3?EJlYf+hf(IvY;HL zyA1-f%rxso$%v+X3x*>HA_D`9B7Y@YuoA%b?QxNLa(<(pK6vXpk3%({-EI>N_}Lk%Y8&01T7?Wt$L zHZ~yK+Y5nRt-tK6tFU$R2Hqmc`vB3-M=3?+a?P_s*^!Y}L)Whvmf2^AW9#d77qq%M z2sAZ=iT78nxus~g*4GMsJ^_Q7uQucHN5N3&LUd^8QxW9S5uUQbHI-huWajmG{B9S; z@EF$W_hKl0dK&bX(_k(vKyGppa9L~dvOnS!S>T9U@b3~`RoBM<2wk2kH!WES8QA9)461N z?jin@5R2i=Tn@7LCQ4%z`{u_*$l}kd@re@5ftW)goMXvQ%s~5q1XaP+3jD(8$ZgU^_>6!002ovPDHLkV1jN4nzH}^ literal 0 HcmV?d00001 diff --git a/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contents.json b/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contents.json new file mode 100644 index 0000000..bcd9da1 --- /dev/null +++ b/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Female_18x18.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Contact_Female_18x18.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contact_Male_18x18.png b/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contact_Male_18x18.png new file mode 100644 index 0000000000000000000000000000000000000000..307f17cbc0ea32d89c44a88329c0ace4b9793c7e GIT binary patch literal 832 zcmV-G1Hb%Px%`bk7VR9Fe^S50UWK@@(oNo*^%e+Z2Si3dgerAQHkAc{~;klZ{~5E1lLum_=d z5)?cr^x#RMofQ9*1K5zI|(g`_EMlHFu{uOW4^JG*(CW650h&G)|d zy>Dig%m$!2nme$`c0e?;p38GGlwMlCBFpl;5ON=BNGTSCAs$7xciex_FU&@Csm8aV z_}i7RwPq#JLZ7~=_!Mjl#>P*!|I+8ZQNuf3o4p~WQOa8{-OUhR_7R7;wbi_tucGNx z_M(*XNIhxd5VsyrmuDNoCPGTMr4!L%668&)(dE1_wxPsCb{94Ydx@zzG{1vtRE!g| z4Vh)*5JynuSS912I_Jb}LnzkG5mY&NU_I)b6SEEB8}yqasB#*qVH*;%{8eqni5sb5 z8%o8xf8y`x497@?BW5Z!{0d^S4G}pIfa~<+3_n~|&zGU(>8>|;Up-U>bTM&=tIO5H zd>JCKmiEr80)*>5MLFWsYwVWyZRmMaT#Ez9yKe(UtpN-yngg=lXGp8P1l$G;|+Wq`vyK^WZK3bTtQjD4$~sF*W^ zF`SBZOmcU~(@^~NTBKAg+`*NeQw8^T1z_~pHWk{4ho^EdpDAt3DG)+D3v6k*Hh!ut zU6asEG#d{<-^>Ha%t)z_pSPPKjRkC&Dd4u)24R%557Hnl(j;wrUY$D(C0?!crWdo5 z_|<+}0&G>u)fjP@{^R_PCya8sv95)hq)k0^9Ksxi3a0fGS9H{^po&jv4C$~czxpI? z>QSBBpAJJftgRh76F8QFqXVUjx&7efRTf4aS*J4-T)%Y3{(L*nxio9xsJiJ5gc)0000< KMNUMnLSTY{NP(~b literal 0 HcmV?d00001 diff --git a/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contents.json b/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contents.json new file mode 100644 index 0000000..d0c4d56 --- /dev/null +++ b/WeChat/WeChat/Assets.xcassets/Contacts/Contact_Male_18x18.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Contact_Male_18x18.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WeChat/WeChat/Assets.xcassets/Contacts/Contents.json b/WeChat/WeChat/Assets.xcassets/Contacts/Contents.json index da4a164..73c0059 100644 --- a/WeChat/WeChat/Assets.xcassets/Contacts/Contents.json +++ b/WeChat/WeChat/Assets.xcassets/Contacts/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_chats.svg b/WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_chats.svg new file mode 100644 index 0000000..39f936e --- /dev/null +++ b/WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_chats.svg @@ -0,0 +1,12 @@ + + + + icons_outlined_chats + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_videocall.svg b/WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_videocall.svg new file mode 100644 index 0000000..43d13bf --- /dev/null +++ b/WeChat/WeChat/Resource/Pictures/Contact/icons_outlined_videocall.svg @@ -0,0 +1,10 @@ + + + + icons_outlined_videocall + Created with Sketch. + + + + + \ No newline at end of file diff --git a/WeChat/WeChat/Utils/Router/MHRouter.m b/WeChat/WeChat/Utils/Router/MHRouter.m index ddb36f7..acd9a6b 100644 --- a/WeChat/WeChat/Utils/Router/MHRouter.m +++ b/WeChat/WeChat/Utils/Router/MHRouter.m @@ -61,6 +61,7 @@ - (NSDictionary *)viewModelViewMappings { @"MHMoreInfoViewModel":@"MHMoreInfoViewController", @"MHFeatureSignatureViewModel":@"MHFeatureSignatureViewController", @"MHAddFriendsViewModel":@"MHAddFriendsViewController", + @"MHContactInfoViewModel":@"MHContactInfoViewController", @"MHSearchFriendsViewModel":@"MHSearchFriendsViewController", @"MHAccountLoginViewModel":@"MHAccountLoginViewController", @"MHBootLoginViewModel":@"MHBootLoginViewController", diff --git a/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.h b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.h new file mode 100644 index 0000000..9fbebc8 --- /dev/null +++ b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.h @@ -0,0 +1,21 @@ +// +// MHContactInfoContactCell.h +// WeChat +// +// Created by zhangguangqun on 2021/4/16. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MHContactInfoContactCell : UITableViewCell +/// 初始化 ++ (instancetype)cellWithTableView:(UITableView *)tableView; + +/// 空操作 +- (void)setIndexPath:(NSIndexPath *)indexPath rowsInSection:(NSInteger)rows; +@end + +NS_ASSUME_NONNULL_END diff --git a/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.m b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.m new file mode 100644 index 0000000..67090bb --- /dev/null +++ b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.m @@ -0,0 +1,48 @@ +// +// MHContactInfoContactCell.m +// WeChat +// +// Created by zhangguangqun on 2021/4/16. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHContactInfoContactCell.h" +#import "MHContactInfoContactItemViewModel.h" + +@interface MHContactInfoContactCell () +@property (weak, nonatomic) IBOutlet UIImageView *iconImage; + +@property (weak, nonatomic) IBOutlet UILabel *titleLabel; + +/// viewModel +@property (nonatomic, readwrite, strong) MHContactInfoContactItemViewModel *viewModel; +@end + + +@implementation MHContactInfoContactCell + ++ (instancetype)cellWithTableView:(UITableView *)tableView { + static NSString *ID = @"ContactInfoContactCell"; + MHContactInfoContactCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; + if (!cell) cell = [self mh_viewFromXib]; + return cell; +} + +- (void)bindViewModel:(MHContactInfoContactItemViewModel *)viewModel{ + self.viewModel = viewModel; + self.iconImage.image = [UIImage mh_svgImageNamed:self.viewModel.iconName targetSize:CGSizeMake(25.0, 25.0) tintColor:MHColorFromHexString(@"#586C95")]; + self.titleLabel.text = self.viewModel.labelString; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; +} + +/// 防止Crash +- (void)setIndexPath:(NSIndexPath *)indexPath rowsInSection:(NSInteger)rows{} +@end diff --git a/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.xib b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.xib new file mode 100644 index 0000000..5b21a97 --- /dev/null +++ b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoContactCell.xib @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.h b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.h new file mode 100644 index 0000000..7881336 --- /dev/null +++ b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.h @@ -0,0 +1,21 @@ +// +// MHContactInfoCell.h +// WeChat +// +// Created by zhangguangqun on 2021/4/15. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MHContactInfoHeaderCell : UITableViewCell +/// 初始化 ++ (instancetype)cellWithTableView:(UITableView *)tableView; + +/// 空操作 +- (void)setIndexPath:(NSIndexPath *)indexPath rowsInSection:(NSInteger)rows; +@end + +NS_ASSUME_NONNULL_END diff --git a/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.m b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.m new file mode 100644 index 0000000..d584972 --- /dev/null +++ b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.m @@ -0,0 +1,57 @@ +// +// MHContactInfoCell.m +// WeChat +// +// Created by zhangguangqun on 2021/4/15. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHContactInfoHeaderCell.h" +#import "MHContactInfoHeaderViewModel.h" + +@interface MHContactInfoHeaderCell () +@property (weak, nonatomic) IBOutlet UIImageView *avatarImageView; + +@property (weak, nonatomic) IBOutlet UILabel *nameCommentLabel; + +@property (weak, nonatomic) IBOutlet UILabel *nickNameLabel; + +@property (weak, nonatomic) IBOutlet UILabel *wechatIdLabel; + +@property (weak, nonatomic) IBOutlet UIImageView *genderImage; + +/// viewModel +@property (nonatomic, readwrite, strong) MHContactInfoHeaderViewModel *viewModel; +@end + +@implementation MHContactInfoHeaderCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + ++ (instancetype)cellWithTableView:(UITableView *)tableView { + static NSString *ID = @"ContactInfoHeaderCell"; + MHContactInfoHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; + if (!cell) cell = [self mh_viewFromXib]; + return cell; +} + +- (void)bindViewModel:(MHContactInfoHeaderViewModel *)viewModel{ + self.viewModel = viewModel; + self.nickNameLabel.text = self.viewModel.user.screenName; + self.wechatIdLabel.text = self.viewModel.user.wechatId; + self.nameCommentLabel.text = self.viewModel.user.screenName; + [self.avatarImageView yy_setImageWithURL:self.viewModel.user.profileImageUrl placeholder:MHWebAvatarImagePlaceholder() options:MHWebImageOptionAutomatic completion:NULL]; + self.genderImage.image = self.viewModel.user.gender == 0?MHImageNamed(@"Contact_Male_18x18.png"):MHImageNamed(@"Contact_Female_18x18.png"); +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; +} + +/// 防止Crash +- (void)setIndexPath:(NSIndexPath *)indexPath rowsInSection:(NSInteger)rows{} + +@end diff --git a/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.xib b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.xib new file mode 100644 index 0000000..3cf276f --- /dev/null +++ b/WeChat/WeChat/View/Contacts/ContactInfo/MHContactInfoHeaderCell.xib @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.h b/WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.h new file mode 100644 index 0000000..afac049 --- /dev/null +++ b/WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.h @@ -0,0 +1,17 @@ +// +// MHContactInfoViewController.h +// WeChat +// +// Created by zhangguangqun on 2021/4/14. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHCommonViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MHContactInfoViewController : MHCommonViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.m b/WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.m new file mode 100644 index 0000000..4d8559a --- /dev/null +++ b/WeChat/WeChat/ViewController/Contacts/ContactInfo/MHContactInfoViewController.m @@ -0,0 +1,64 @@ +// +// MHContactInfoViewController.m +// WeChat +// +// Created by zhangguangqun on 2021/4/14. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHContactInfoViewController.h" +#import "MhContactInfoViewModel.h" +#import "MHContactInfoHeaderCell.h" +#import "MHContactInfoContactCell.h" + +@interface MHContactInfoViewController () + +/// viewModel +@property (nonatomic, readonly, strong) MHContactInfoViewModel *viewModel; + +@end + +@implementation MHContactInfoViewController + +@dynamic viewModel; + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self _setupNavigationItem]; +} + +/// 设置导航栏 +- (void)_setupNavigationItem{ + self.navigationItem.rightBarButtonItem = [UIBarButtonItem mh_svgBarButtonItem:@"icons_filled_more.svg" targetSize:CGSizeMake(24.0, 24.0) tintColor:nil target:nil selector:nil]; +} + +#pragma mark - Override +- (void)bindViewModel{ + [super bindViewModel]; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath{ + /// 用户信息的cell + if (indexPath.section == 0 && indexPath.row == 0) return [MHContactInfoHeaderCell cellWithTableView:tableView]; + if (indexPath.section == 2) return [MHContactInfoContactCell cellWithTableView:tableView]; + return [super tableView:tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; +} + +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath withObject:(id)object{ + /// 用户信息的cell + if (indexPath.section == 0 && indexPath.row == 0) { + MHContactInfoHeaderCell *contactInfoHeaderCell = (MHContactInfoHeaderCell *)cell; + [contactInfoHeaderCell bindViewModel:object]; + return; + } + if (indexPath.section == 2) { + MHContactInfoContactCell *contactInfoContactCell = (MHContactInfoContactCell *)cell; + [contactInfoContactCell bindViewModel:object]; + return; + } + [super configureCell:cell atIndexPath:indexPath withObject:object]; +} + +@end diff --git a/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.h b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.h new file mode 100644 index 0000000..cf626f9 --- /dev/null +++ b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.h @@ -0,0 +1,23 @@ +// +// MHContactInfoContactItemViewModel.h +// WeChat +// +// Created by zhangguangqun on 2021/4/16. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHCommonItemViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +/// 联系人详情页面最下面的“发消息”、“音视频通话”的cell对应的ViewModel +@interface MHContactInfoContactItemViewModel : MHCommonItemViewModel +/// 图标名称 +@property (nonatomic, readonly, copy) NSString *iconName; +/// 文字名称 +@property (nonatomic, readonly, copy) NSString *labelString; + +- (instancetype)initViewModelWithIconName:(NSString *)iconName andLabelString:(NSString *)labelString; +@end + +NS_ASSUME_NONNULL_END diff --git a/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.m b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.m new file mode 100644 index 0000000..f361227 --- /dev/null +++ b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoContactItemViewModel.m @@ -0,0 +1,26 @@ +// +// MHContactInfoContactItemViewModel.m +// WeChat +// +// Created by zhangguangqun on 2021/4/16. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHContactInfoContactItemViewModel.h" + +@interface MHContactInfoContactItemViewModel () +/// 图标名称 +@property (nonatomic, readwrite, copy) NSString *iconName; +/// 文字名称 +@property (nonatomic, readwrite, copy) NSString *labelString; +@end + +@implementation MHContactInfoContactItemViewModel +- (instancetype)initViewModelWithIconName:(NSString *)iconName andLabelString:(NSString *)labelString { + if (self = [super init]) { + _iconName = iconName; + _labelString = labelString; + } + return self; +} +@end diff --git a/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.h b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.h new file mode 100644 index 0000000..f21aeaf --- /dev/null +++ b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.h @@ -0,0 +1,22 @@ +// +// MHContactInfoHeaderViewModel.h +// WeChat +// +// Created by zhangguangqun on 2021/4/15. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHCommonItemViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +// 联系人详情页面最上面有头像的cell对应的ViewModel +@interface MHContactInfoHeaderViewModel : MHCommonItemViewModel +/// 联系人 +@property (nonatomic, readonly, strong) MHUser *user; + + +- (instancetype)initViewModelWithUser:(MHUser *)user; +@end + +NS_ASSUME_NONNULL_END diff --git a/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.m b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.m new file mode 100644 index 0000000..b4416e5 --- /dev/null +++ b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoHeaderViewModel.m @@ -0,0 +1,24 @@ +// +// MHContactInfoHeaderViewModel.m +// WeChat +// +// Created by zhangguangqun on 2021/4/15. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHContactInfoHeaderViewModel.h" + +@interface MHContactInfoHeaderViewModel () +/// 联系人 +@property (nonatomic, readwrite, strong) MHUser *user; +@end + +@implementation MHContactInfoHeaderViewModel +- (instancetype)initViewModelWithUser:(MHUser *)user{ + if (self = [super init]) { + self.rowHeight = 106.0f; + self.user = user; + } + return self; +} +@end diff --git a/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.h b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.h new file mode 100644 index 0000000..92fa89a --- /dev/null +++ b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.h @@ -0,0 +1,19 @@ +// +// MHContactInfoViewModel.h +// WeChat +// +// Created by zhangguangqun on 2021/4/14. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHCommonViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MHContactInfoViewModel : MHCommonViewModel +/// 联系人 +@property (nonatomic, readonly, strong) MHUser *contact; + +@end + +NS_ASSUME_NONNULL_END diff --git a/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.m b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.m new file mode 100644 index 0000000..38ba4b8 --- /dev/null +++ b/WeChat/WeChat/ViewModel/Contacts/ContactInfo/MHContactInfoViewModel.m @@ -0,0 +1,60 @@ +// +// MHContactInfoViewModel.m +// WeChat +// +// Created by zhangguangqun on 2021/4/14. +// Copyright © 2021 CoderMikeHe. All rights reserved. +// + +#import "MHContactInfoViewModel.h" +#import "MHContactsItemViewModel.h" +#import "MHCommonArrowItemViewModel.h" +#import "MHContactInfoHeaderViewModel.h" +#import "MHContactInfoContactItemViewModel.h" + +@interface MHContactInfoViewModel () +/// 联系人 +@property (nonatomic, readwrite, strong) MHUser *contact; + +@end + +@implementation MHContactInfoViewModel + +- (void)initialize{ + [super initialize]; + + [self _configureData]; +} + +- (instancetype)initWithServices:(id)services params:(NSDictionary *)params{ + if (self = [super initWithServices:services params:params]) { + self.contact = params[MHViewModelUtilKey]; + } + return self; +} + +- (void)_configureData{ + /// 第一组 + MHCommonGroupViewModel *group1 = [MHCommonGroupViewModel groupViewModel]; + /// 联系人信息 + MHContactInfoHeaderViewModel *contactInfoHeader = [[MHContactInfoHeaderViewModel alloc] initViewModelWithUser:self.contact]; + /// 设置备注和标签 + MHCommonArrowItemViewModel *setCommentAndTag = [MHCommonArrowItemViewModel itemViewModelWithTitle:@"设置备注和标签"]; + group1.itemViewModels = @[contactInfoHeader, setCommentAndTag]; + + /// 第二组 + MHCommonGroupViewModel *group2 = [MHCommonGroupViewModel groupViewModel]; + MHCommonArrowItemViewModel *moment = [MHCommonArrowItemViewModel itemViewModelWithTitle:@"朋友圈"]; + MHCommonArrowItemViewModel *moreInfo = [MHCommonArrowItemViewModel itemViewModelWithTitle:@"更多信息"]; + group2.itemViewModels = @[moment, moreInfo]; + + /// 第三组 + MHCommonGroupViewModel *group3 = [MHCommonGroupViewModel groupViewModel]; + MHContactInfoContactItemViewModel *sendMessage = [[MHContactInfoContactItemViewModel alloc] initViewModelWithIconName:@"icons_outlined_chats.svg" andLabelString:@"发消息"]; + MHContactInfoContactItemViewModel *videoCall = [[MHContactInfoContactItemViewModel alloc] initViewModelWithIconName:@"icons_outlined_videocall.svg" andLabelString:@"音视频通话"]; + group3.itemViewModels = @[sendMessage, videoCall]; + + self.dataSource = @[group1, group2, group3]; +} + +@end diff --git a/WeChat/WeChat/ViewModel/Contacts/MHContactsViewModel.m b/WeChat/WeChat/ViewModel/Contacts/MHContactsViewModel.m index 45a483f..609e6f5 100644 --- a/WeChat/WeChat/ViewModel/Contacts/MHContactsViewModel.m +++ b/WeChat/WeChat/ViewModel/Contacts/MHContactsViewModel.m @@ -7,6 +7,7 @@ // #import "MHContactsViewModel.h" +#import "MHContactInfoViewModel.h" #import "MHAddFriendsViewModel.h" #import "MHContactsService.h" #import "WPFPinYinTools.h" @@ -65,6 +66,20 @@ - (void)initialize return [RACSignal empty]; }]; + /// 选中cell 跳转的命令 + self.didSelectCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(NSIndexPath * indexPath) { + // 非联系人暂时不处理 + if (indexPath.section == 0) { + return [RACSignal empty]; + } + + // 点击联系人跳转到联系人详情页面 + @strongify(self); + MHContactInfoViewModel *viewModel = [[MHContactInfoViewModel alloc] initWithServices:self.services params:@{MHViewModelUtilKey: ((MHContactsItemViewModel *)self.dataSource[indexPath.section][indexPath.row]).contact}]; + [self.services pushViewModel:viewModel animated:YES]; + return [RACSignal empty]; + }]; + // 赋值数据 RAC(self, contacts) = self.requestRemoteDataCommand.executionSignals.switchToLatest;