From b055076e0acd5c32e5342a0d1abb3ecabb0f4d76 Mon Sep 17 00:00:00 2001 From: liyuhua <15626451870@163.com> Date: Mon, 14 Aug 2023 17:16:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YuMi/Appdelegate/AppDelegate.m | 1 - .../mine_dynamic.imageset/Contents.json | 22 + .../mine_dynamic.imageset/mine_dynamic@2x.png | Bin 0 -> 995 bytes .../mine_dynamic.imageset/mine_dynamic@3x.png | Bin 0 -> 1762 bytes .../monents_info_topic_icon@2x.png | Bin 1277 -> 896 bytes .../monents_info_topic_icon@3x.png | Bin 2202 -> 1551 bytes .../monents_nav_interavtive_message@2x.png | Bin 517 -> 658 bytes .../monents_nav_interavtive_message@3x.png | Bin 787 -> 958 bytes .../monents_on_line_bg.imageset/Contents.json | 22 + .../monents_on_line_bg@2x.png | Bin 0 -> 1118 bytes .../monents_on_line_bg@3x.png | Bin 0 -> 1822 bytes .../Contents.json | 22 + .../monents_on_line_note@2x.png | Bin 0 -> 384 bytes .../monents_on_line_note@3x.png | Bin 0 -> 548 bytes .../monents_publish@2x.png | Bin 11077 -> 3686 bytes .../monents_publish@3x.png | Bin 23180 -> 6196 bytes .../YMLogin/Presenter/LoginPresenter.m | 28 +- .../Modules/YMMine/View/Guild/Api/Api+Guild.m | 1 - YuMi/Modules/YMMonents/Api/Api+Monents.h | 4 + YuMi/Modules/YMMonents/Api/Api+Monents.m | 7 +- .../YMMonents/Model/MonentsInfoModel.h | 18 +- .../YMMonents/Model/MonentsInfoModel.m | 14 +- .../Presenter/XPMonentDetailPresenter.h | 1 + .../Presenter/XPMonentDetailPresenter.m | 5 + .../Presenter/XPMonentsAttentionPresenter.h | 3 +- .../Presenter/XPMonentsAttentionPresenter.m | 6 +- .../Presenter/XPMonentsLatestPresenter.h | 3 + .../Presenter/XPMonentsLatestPresenter.m | 6 +- .../Presenter/XPMonentsRecommendPresenter.h | 3 + .../Presenter/XPMonentsRecommendPresenter.m | 6 +- .../Presenter/XPMonentsTopicLatestPresenter.h | 1 + .../Presenter/XPMonentsTopicLatestPresenter.m | 6 +- .../XPMonentsTopicRecommendPresenter.h | 1 + .../XPMonentsTopicRecommendPresenter.m | 5 + .../Protocol/XPMonentsAttentionProtocol.h | 2 + .../Protocol/XPMonentsDetailProtocol.h | 2 + .../Protocol/XPMonentsLatestProtocol.h | 2 + .../Protocol/XPMonentsRecommendProtocol.h | 3 +- .../Protocol/XPMonentsTopicLatestProtocol.h | 2 + .../XPMonentsTopicRecommendProtocol.h | 2 + .../View/Cell/XPMonentsTableViewCell.h | 1 + .../View/Cell/XPMonentsTableViewCell.m | 24 +- .../Cell/XPMonentsTopicCollectionViewCell.m | 129 ++-- .../View/SubViews/XPMoentsTopicView.m | 150 ++-- .../View/SubViews/XPMonentsContentView.h | 12 +- .../View/SubViews/XPMonentsContentView.m | 241 ++++--- .../View/SubViews/XPMonentsPhotoView.m | 421 +++++------ .../SubViews/XPMonentsRecommendHeaderView.m | 241 ++++--- .../View/SubViews/XPMonentsUserInfoView.h | 9 +- .../View/SubViews/XPMonentsUserInfoView.m | 679 +++++++++--------- .../View/XPMonentsAttentionViewController.m | 367 +++++----- .../View/XPMonentsDetailViewController.m | 596 ++++++++------- .../View/XPMonentsLatestViewController.m | 372 +++++----- .../View/XPMonentsRecommendViewController.m | 397 +++++----- .../View/XPMonentsTopicLatestViewController.m | 393 +++++----- .../XPMonentsTopicRecommondViewController.m | 339 ++++----- .../YMMonents/View/XPMonentsViewController.m | 337 ++++----- YuMi/Structure/PrefixHeader.pch | 1 + YuMi/zh-Hans.lproj/Localizable.strings | 45 +- YuMi/zh-Hant.lproj/Localizable.strings | 45 +- 60 files changed, 2732 insertions(+), 2265 deletions(-) create mode 100644 YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/mine_dynamic@2x.png create mode 100644 YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/mine_dynamic@3x.png create mode 100644 YuMi/Assets.xcassets/Monents/monents_on_line_bg.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/Monents/monents_on_line_bg.imageset/monents_on_line_bg@2x.png create mode 100644 YuMi/Assets.xcassets/Monents/monents_on_line_bg.imageset/monents_on_line_bg@3x.png create mode 100644 YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/monents_on_line_note@2x.png create mode 100644 YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/monents_on_line_note@3x.png diff --git a/YuMi/Appdelegate/AppDelegate.m b/YuMi/Appdelegate/AppDelegate.m index 82fe456a..94408d4a 100644 --- a/YuMi/Appdelegate/AppDelegate.m +++ b/YuMi/Appdelegate/AppDelegate.m @@ -37,7 +37,6 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; [UMConfigure initWithAppkey:@"6434c6dfd64e686139618269" channel:@"yumi_appstore"]; } [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; - [FIRApp configure]; return YES; } diff --git a/YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/Contents.json b/YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/Contents.json new file mode 100644 index 00000000..8a5773df --- /dev/null +++ b/YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_dynamic@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_dynamic@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/mine_dynamic@2x.png b/YuMi/Assets.xcassets/Monents/mine_dynamic.imageset/mine_dynamic@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ba002e4179c25f15da23369ab01e4bbc2d1c2845 GIT binary patch literal 995 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 literal 0 HcmV?d00001 diff --git a/YuMi/Assets.xcassets/Monents/monents_info_topic_icon.imageset/monents_info_topic_icon@2x.png b/YuMi/Assets.xcassets/Monents/monents_info_topic_icon.imageset/monents_info_topic_icon@2x.png index 688dd76f38ab91d3e3baa0467ecff8910aa69301..669a17e9e633ff27a65b4ab24c447755ad560b3e 100644 GIT binary patch literal 896 zcmV-`1AqL9P)xN#0004-P)t-s0002I zfd8+E|0B`m8sGIN+xDiO{!_{KovQzEzyHE^{~X@-!Fm6~bpM~R|1{Y7ynz3luKuQ` z|CY4hP?ftuKz{Q_?oo; z#Bu+cwEvE|{qpAOz|_sVMji@N| z{}tf%siOamx&OC`|G9zxe!To6-1Z^f_Nbr#v6BDEasM{h`cujJin#i^djE~H`o4Dm zF4*#nv;VA`|Fn+(zJ33|c>iw0{7laIoU{L)vHzd1|FD(+wu}F|g8!1Y{+71>gS`D- z$@^K#`aaY6G1vE@s{f;?|D>h=rlS9;pZ}_y|E`z+vXcL}i2uZK|CqJ@b;0~;#QRdr z`9#t9EZO%s)%T#S|G9<#i@N@gxc+^<{fN8$dcXW)$NOc)`!?41B;591;=Jep003Ha zQchC<{tyZN{Xjr45cco4d0$>pNjW$$EC~hr`1tkp^YiQHt7$QW`#m=6=cZGYlLRX z?{881=R53AWn3@8DoL@kNS=s$qNQRa9<8Lad3S*!*+qn& zY_^pe-Fl}|sV?#VgZoGR_*j&l03NvlZbA@}w#7>O@R-g8hWX~gxPwQx&W;U+&TM}4 z$IJL%=dw^CvYC%GV{+Hv=8)J`Q{Ih W@KX&W6wIzQ) literal 1277 zcmVgk_xtAj``-Hd;`sXF`}*Gd`{Mig-2ciH_xa%Y`{e(_4fpoj`}f%Y&l&jm z-v7i7_x0KM^ws+C%m2n>|Hlyf_}cpQ)%x?%`0>vF#ApB1J^#`h|I8Kt$P)j-3;6QV z|Hxne%@+CU!2j1K|J5V^(;xr83Hj^7`R2F(%~Su+Pyf_K|H2Xf#Sj0y2KV>g`|-{A z@5}k_$p7J!|K5=Q!EFD+Y5&Sx|H)ea%~$`@LjT$`|JE!2)*=7K6#Dw$`1#=c`rrKb z*7xzy`0T~{=ehdpxBu(1|K^qd(MkW*H~-Zy|Jf}6)hGVTB>%`A|Hu~qzYhPo1^D~r z|MlMg?Zx@&z4_&~`{S+u=dAzdp!(yF{^5fE!EgTATK~#e|I$qV*Fpc-JO9r)|JXJE z)-wOXD*w_X|H2&q!xjI(6#x72|M~0x_vHWg;QjQ||M1KE_R0F}#QEs6`Q)km?V$hR zn*7$6{?~;5!gKuEa{b_K|J7;z&{Y4^Q~$?L|JF$V(@6izNB+-6|IQ=-yAS{S_5b(f z`tQp9@x%M@zyIvF`rfGj>81bVrT*%d{OO7R-iH0qhWp=p|KWK5)pz~oasJA1{n~H- z&uRVNWB$@$|I=Up$U6VaGXKmQ&C;aJ0008aNkln zkO0Lk1c?EG2nmn`i@P^&jeDbYckdVN?p|R!)A#27dVcfl?K{UQE90QKgQlFFyJ&9V z;c_`;@c9pvas+UWML802ELhN61UTn#_fNR$C?a#rbegTG9Y-A)zcK4v9>1oe5v{^-mg+*q4Z)zy;4_GAtHW05f|A)*iB-;rEF!5VVe& zkmyQ{05J0MIanPIAyM%{fD<(Hi-xWMOFoca3Z(~`ctVjkW9Im@WqttdmD*?MsX$gsw!hEpfqEhOxT_Nf&f0^ zNGw;WJU>FK;8iFHKrlGl)yXjKQG5hPAk}Vr#B#5vaI+5Pm*>Ib<=l0&3vRswexB#y$9~Eu!i(Ba3@styDHOcI*i!7b)nds+=eB8*;NFG} za1mRlRaIiK*yDwl$qQvVtJPv24HzUM2=Eyl%QhPna&%jvUIvBbeS#)^ydpTQuC~Dr zbXy2aGTp+c-A|zc7IgIVKw)D=C9Ig(vHK0Ah*ttPC83IC!$&&<378Wo$3U%pVjpk} zIvj)Wb+oq+*aI|05+W`JcOcNz1h(w=*s&)P0op*}->ujHcd4Zn?9en!DTxo~Yy%Q% nsYXL-&`Xh|L_&yoY!2rSqO6+n=&pmv00000NkvXXu0mjfRf6Wz diff --git a/YuMi/Assets.xcassets/Monents/monents_info_topic_icon.imageset/monents_info_topic_icon@3x.png b/YuMi/Assets.xcassets/Monents/monents_info_topic_icon.imageset/monents_info_topic_icon@3x.png index 3013f4c2401c8e18a22c6df2839f43c89367bf7a..b89f23e024aac59594337f6a656172f0af22bee2 100644 GIT binary patch literal 1551 zcmW-gc|6p47{@2o?q;{kP*J38Rwz=vimjHGq!3|kIl5bmI|Y5-4r~PB7q`fEEiy ztx!=5RxhQAT?(TKIpZ#rG=uhAp#fh+sD%d|P)34mvPyGCSlkM`UW;sak}4ux;VAwX zkcTssIb|cqLLya8!N8VjVG>PAtX_VbKv$jON*Uo$-T>4)aQe9nk!6KK zV<9kO;4T?V#znV!!D0rY+CT+A`rmyE2R+zr>dLv1B@Lm!91Ki&v6- zGPI{bcQmx%z+*^;&_K%0B}00Lf{2K}U82Q7bva~o!ZyChi7S1Y4g-OpKPgV5f-YZZ zHYv-Z05cc{!=R7?%{frk2$baI#?|7NNg}@Jv2d9qFKmNHtx(#sOdIjob{`Och!<)C z(Bgp^0jw}cpefJy%WYps_m7G7-iVMfsH}#nDnMKyG}_aVGE@)SRk=@9fjx?wEJb9u z!ec<@$dw-YM{@L~#B@SzJ}yQa5eZOJ0Z3m`yHt0(RIzmBHMYX9R}scg_&k$Y^Q0$7 zq*kMnpZN$n(W5qaf`hIk$m~=hjdmT9IS)y39jYk0@?xLdZBVvpT9~)4#2lI0(pzVp z-B7EwzF)1Wnx)eyrLHb#oGo_zs8R|SKF@x5|8|r?r&EY{JiZi%dk}RyJk-nm)N#uL zMn=1Ix9MzJtB}iNGO0u?6fP|-e*3ntF#ly%AP~HNH#0RkKF;F~53<=T2BJajqEN^! zq{olzi52B#h+J_|QDI(gE^c{cW@Ow=3=atm2)K5|+v~iihntJDwYAm3eR|rO>-__L z$B=&(&H?)g)WX5DcFKdT4`v$!Bv!aZhky%FKJ;@)g7yaspj4m|47Q= zS?ozu2g75LKBHLwzbLos+uXeSb{`H;Xj*ztzd&J(w8FQtwcTzg+>hbo{&k5h9d*$QnUjr5Bql+}+G7_m z?d=0=)^Jf%iD)%J;W~ZxjV*HD6m(h>6`wMYj|Ks5wb?=K=Q)1t(?@?-aD+{ZrqNw1 zv)5N@K#+#vh2&4_%=f1)d#byK%_e#|n%DW$YM+g3O&57{mxnjf`P*ymNe-KDxL|t< ZR+MKS)i6tN#3FwL5ZmqDDE~Hei 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 diff --git a/YuMi/Assets.xcassets/Monents/monents_nav_interavtive_message.imageset/monents_nav_interavtive_message@2x.png b/YuMi/Assets.xcassets/Monents/monents_nav_interavtive_message.imageset/monents_nav_interavtive_message@2x.png index c35b75214932fd5bdc80edaf255b1233eba64836..3fba2664e80a3456ccb59f45f3fe2ddca6428965 100644 GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sT>(BJu0UE|%3nbuKwjF9fx%Nw z%1>U}UrfXm$N(WpFewcpWyF0XBz)wg{pF;~NAljX~K z&e!*oBSOlgMBg9YR^X>r7p?dE+0Clr1mhR`TFv<{A6+oT-Jw5kRZHnU1_s71PZ!4! zkKji<&>wN1;sEjFf0 zawzV(a%(>4(fMl?#JX&@e7vXL`X$ylK=(|SK`+Y&MZTIv=M-k1YfW<6mSq@U`)T<+ z1|{{6o)tkGnU;NDAN4^ZeBZ5KSNY%E_L|LqXTEwqFQ-XlEBlEw^BpSFk2Uvm1-*Ee zmvPteh6wM5wnLAgFjZTjXp)ql>dDC^!c}Qx zz_x?om}>RrU6-s5u_{+SscU}lDY8J4udGHkC#FF5(~r~>lYbjK&s=f&$x8M{hGPrU z-W`ASGF6{3E&7=-uifo)OHO}Ed@-S9!j@gf*EKerb60q|?0>oIp{9)c>^9YD_3wS= zMTpKjxHp1V`(P}qZuWP#*h{y&vb8z*i;Cm(A6%T(pjNo`Nmdk($ffRYSIc^uSWEV{ zh4S8wm0*qJi~W=OM#SN*ance&TU})_m3xbScqbj*67cWnlpBXKX9fA~Ypgev^Ra)b Sk|+a=P6kg`KbLh*2~7ad4E{<0 literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^NlPaO0wd-_b(pVz9`I2U9f+`Mso%RMoCW>#}JFtZztX? zYBu0u=-t?RSoYnNJIDY1SD$8*nX%Jq?!K~korSK`jwKyXyVD`x(J`&{wWLLS`s@6n zFdp<3f#+n*e$lFL>6hC5>t3(on({++b!h!Li3RV|c~)1l yuHKp&C#dT0W!OH6?ZAnpy0=_jFOjXOVXytK$*{rpIx8?(89ZJ6T-G@yGywqmsl(C$ diff --git a/YuMi/Assets.xcassets/Monents/monents_nav_interavtive_message.imageset/monents_nav_interavtive_message@3x.png b/YuMi/Assets.xcassets/Monents/monents_nav_interavtive_message.imageset/monents_nav_interavtive_message@3x.png index 61dfc062176e801cc1ab86b24b7c963554c2cb96..6197d5606534745766a2854e78f4e638d3a6fc4a 100644 GIT binary patch literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAk#%mAMdS0F7f?GHo>(%#}??m&j3 zOn?Gd1jv?^_ET2&l9Te6k_wQQ@&__xCH;UTL<>+vR?1%i#PtJ;fW#pPtX)pZPacS* zVd~+!fFd9Te)1Af^*}BNNrAq~v;pWiqmm%MV1}pj4Y>c9uK)Q>l3jrF z=Y{s%|4{Oec!Zl&CBchX0MvKQgPqUy_{PP&SCx` zVPgI#;iSgv{ZqW7C8OMcIdT9oiU(ENC!K8wC`^P4|T z4?Tostk%~qnE6BH+usEY_nzzjGP>DrYW?@C0sG?Q^?@Aj+rz5Mmo=#GjhistvBG1o z{$V+(5(UrsoxEz%QFmEZ7tilx?4EaV5{Jx&m&T38rv-d1GJenEmsqn>A;xCybv7Fb zpOp(V*NS`iD7@tU#WG=*LF1%%f3E*n=_92insP07`t^CU+pSl22x)1o@#PJ#x8?M; z(K^vQy=>d$$g=E9ihH+bKip$>K5D7bD#O&&Ly#Ewy-6zO60S|JIgof+7;z+_fD3Q zE|*cZSg`TZ_uaRPcI<7tH}PpvSzhtFu6@5a{xa89?2*{GbHi3(T4(Td^>bP0l+XkK Dslt{j literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^#z1Vz!3-qVJb7FPq$UUWgt&qvjEzlAO-)QpfDC76 zXCR3NEG;d8vgYRIKyf1@BQrBIpn8ZJpg0h~*=P(P7g+&B7H$`^Vu&(`QLguSRsx-6 zP!i-9%y31U=Q{K2yT3nuzscDuCcq{weDXkmjmncVM|N-9xO#S^i~RZAMJ8(R`m0t< zDNK!5={xeBfr0VAr;B5V$MLsQt{1H~5OFm$+S_%nd*jE_>;LQTUY$5oKp(%L+H?x_@(iw5dbwO++d(sQ?85r5t1?Xq2#kK6tQ+~YiDx4qKm zUR04pK4(3=|3(kJugzf>-wAj&ll`cUpPm=+>@bn$$WJu-jJ~KxnG61 z=>3@Ew#0waP1!StwN$w&$8d>gL1a67AcKmYP49}BA| zEI7;UC(X+=H?iY-(_uEhYId>xaRn3DX0MKS?>Me+aj0+KmfOz?>d(#pyjmutS=eG) zs$xsY-EFy!GfG=lbsp$c>D^SnnR%8)*7drZ!5vI&0>9QEtXnXD9HeTy5X%#JVa zo19ntZjHs`Fp5;Rl;wJ6LlQHLId37kW;Ywh{=Xlm01{}kf(Io0^WcmK<2{}|x*EZO(RZ~w|_|0>(~%Vz&I z*7(AB|I29q7vT2Ba{tO^{}tf)H`DmMbpOj@|1r|^58?2+bN|6(|Gj?yzY z^()!;9N+dq)Av5q_!Z&x7vS|X*Y`Bp`a0J7E!z0ZXa5%A^|6xwowNU|o&T_v|Gj|! zpsxR-tpB5_|EHw?sGqS64AA zDhTY*m~3f8`T6wp^w`(c#l^*?rKO>qoSd7NmuqKdU0qy6L@+QSA|fIb6#4o2`SkSd z&c(&0U0p=e$L*~E00IU{L_t(o!^M{eQ`2A^hkr>rftFFgvP2QYfr_|s?>&+Z_6{Qj zO2ckK6Zf{&Z>)(W7p{yuj{N(4f#>eM-ciA08nr>AFT z=99^VPdz>B>!}ANZfn kl?h9^XS-X<`vu|t7vSB(R!}l-^8f$<07*qoM6N<$f`zqmQ2+n{ literal 0 HcmV?d00001 diff --git a/YuMi/Assets.xcassets/Monents/monents_on_line_bg.imageset/monents_on_line_bg@3x.png b/YuMi/Assets.xcassets/Monents/monents_on_line_bg.imageset/monents_on_line_bg@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b6383e2cd092adfeafe8329a5f65d2b5e0d2ed3b GIT binary patch literal 1822 zcmWku2{fD87Z0X(ou08)(NcfwY1C5Msv0drs>)O>RZJ*iUrOz&qSNX^$1*iktyBJL zslBBM2@$*M62y{-)D%N0@_k8=H(&30%enXc?!CWz-#hPt%N2V$X;o^N;J@&-Wdr7rqetX7MB_a^k!i*I!~Rsqc^!@Kwnj3L4EN+i4DBw zLOqc{YyRs%3_yGl@MsV)o8t8(gZ`U9lL_g}!ALqJjtZNL*pc7{v+zJ9LJ6{%80M#!*T`73p29ORTWi~wpExDlW33&Yg=`i$n4QMC^ z>D~KB7LdBQwdJ6`1T+?c_H59b2nHiTVFxH{0_BaMq5)Laf#!VBbr<|j+z+Jf{yHYW zjtV?S1egiF(>uQYEZma@aD%%c{kujC-v2AUGtB7}7Q7J>Nc(3dc~!OGO%~|92aub} zeIrcn*^lnqi|O6FMcMNm+Pyw3=y(jsDZu6<-|hq7>JzW51!TPyhEezY2X;?Q@vJ}c zwCCYx?VzX~)Kr0*O7N&l_^?Zu*0Uc$-HWB{C6f1?#|5-#(0Lztw)n>&4=yS0>J?X% zin4@+oQ_Z+C~)6iSs)k0DgLzg#lzj*?xK>cU~82+0%C@^UjWlA@#iF}Akn zRDb%B2XAj}uBLjUI&q# z89I$dDap?a^6@@rtMFn9g%bOMv9-YlGwH=s9`e5)qT%HU`jyuM8MA#X#-?FP00XXJSdx|g0`xP+p}MK8*<_SB^9ja#)Qd>w@|R7vPf z&+)ATGRdTsTO8Whvz}MJr1*6KSNUBTOSs7%{?l@U1roP*R^H)zG^~ZbzQP5{(#S@4 z8p*>W0SFnbW#^R?h-oQb=lI*oXm28~sclDLX}j>PqM{<7&#!SV{L{@{NlD4K3yZ~i zdwaWaw*oOkRo3n8bX|R2z1NYX;`6C1t0!iQP|F(glO;O^#R3{_DhlfrWf4Z=xc*Br zZ#cm8a@?O1tjY#13;z<4jmy4$!S>QcCnu*gQo2`9d;_;E^C}gK8ed5%G0ju~R*Cw^GyUTZTj=REoW0oXN=e2KH`LaW$<8M=!*IW6&WrPk z90pDPTEdBmSX)X-5&RA+vE;8iNouB%**F`S&A-d4+d^N6Cw{Ou1xn5YvsnDMfTEye z5$DO^>Vd6*{2(SebqhU4l;X?&;u;lkwy%kYS2466s~o)-?wL-`?jJO4)eH|{FsAX5 zIjr*36@0T6YkaF9td?D;$O_3nqwtRWqxrt2s#$Zj(0IXfsQze(Q#%2(N!rgWd3^!(Hz$^&gy1 zaColy?fKZ5;?~p((tD$Zjqd%L$(QME@ug#Y8PSf+CO>DZSIEDE!q{E0ZM=XZ{0AQY B4S)au literal 0 HcmV?d00001 diff --git a/YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/Contents.json b/YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/Contents.json new file mode 100644 index 00000000..7aa28d85 --- /dev/null +++ b/YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "monents_on_line_note@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "monents_on_line_note@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/monents_on_line_note@2x.png b/YuMi/Assets.xcassets/Monents/monents_on_line_note.imageset/monents_on_line_note@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4960d34f7ee29184c6007e2b0c22fa785d93cf GIT binary patch literal 384 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 LNkvXXu0mjfjO+?= diff --git a/YuMi/Assets.xcassets/Monents/monents_publish.imageset/monents_publish@3x.png b/YuMi/Assets.xcassets/Monents/monents_publish.imageset/monents_publish@3x.png index 000f93db739efd8388193d7b1128c1f5a97eb4c2..7aa5118cf07736ffe65c8f0a77d5c5ad9157f274 100644 GIT binary patch literal 6196 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 literal 23180 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%0AR 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 diff --git a/YuMi/Modules/YMLogin/Presenter/LoginPresenter.m b/YuMi/Modules/YMLogin/Presenter/LoginPresenter.m index a4b6d396..eee4d816 100644 --- a/YuMi/Modules/YMLogin/Presenter/LoginPresenter.m +++ b/YuMi/Modules/YMLogin/Presenter/LoginPresenter.m @@ -32,34 +32,24 @@ - (instancetype)init{ self = [super init]; if(self){ - [FBSDKProfile enableUpdatesOnAccessTokenChange:YES]; + + @weakify(self); [[NSNotificationCenter defaultCenter] addObserverForName:FBSDKProfileDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock: ^(NSNotification *notification) { - + @strongify(self); if ([FBSDKProfile currentProfile]) { - - //获取当前用户名 [FBSDKProfile loadCurrentProfileWithCompletion: ^(FBSDKProfile *profile, NSError *error) { if (profile) { - ThirdUserInfo * userInfo = [[ThirdUserInfo alloc] init]; - NSString * openid = profile.userID; - NSString * access_token = profile.userID; - NSString * unionid = profile.userID; - userInfo.openid = openid; - userInfo.access_token = access_token; - userInfo.unionid = unionid; - userInfo.userName = profile.name; - userInfo.avatarUrl = profile.imageURL.absoluteString; - [AccountInfoStorage instance].thirdUserInfo = userInfo; + [AccountInfoStorage instance].thirdUserInfo.userName = profile.name; + [AccountInfoStorage instance].thirdUserInfo.avatarUrl = profile.imageURL.absoluteString; [self loginWithThirdPartWithType:ThirdLoginType_FB]; } }]; - } }]; @@ -171,6 +161,8 @@ } -(void)thirdLoginByFBWithPresentingViewController:(UIViewController *)presentingViewController { + [FBSDKProfile enableUpdatesOnAccessTokenChange:YES]; + [FBSDKAccessToken setCurrentAccessToken:nil]; FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init]; [manager logOut]; [manager logInWithPermissions:@[@"public_profile"] @@ -181,7 +173,11 @@ } else if (result.isCancelled) { [[self getView] showErrorToast:YMLocalizedString(@"LoginPresenter0")]; } else { - NSLog(@"Logged in"); + ThirdUserInfo * userInfo = [[ThirdUserInfo alloc] init]; + userInfo.openid = result.token.userID; + userInfo.access_token = result.token.tokenString; + userInfo.unionid = result.token.userID; + [AccountInfoStorage instance].thirdUserInfo = userInfo; } }]; } diff --git a/YuMi/Modules/YMMine/View/Guild/Api/Api+Guild.m b/YuMi/Modules/YMMine/View/Guild/Api/Api+Guild.m index c5c03378..b33778b3 100644 --- a/YuMi/Modules/YMMine/View/Guild/Api/Api+Guild.m +++ b/YuMi/Modules/YMMine/View/Guild/Api/Api+Guild.m @@ -190,7 +190,6 @@ /// 公会个播收入列表 /// @param completion 完成 /// @param uid 用户的uid -/// @param hallId 公会的id /// @param startTime 开始时间 /// @param endTime 结束时间 + (void)getHallSingleRoomIncomeRecord:(HttpRequestHelperCompletion)completion uid:(NSString *)uid clanId:(NSString *)clanId startTime:(NSString *)startTime endTime:(NSString *)endTime { diff --git a/YuMi/Modules/YMMonents/Api/Api+Monents.h b/YuMi/Modules/YMMonents/Api/Api+Monents.h index 672edbf3..708f9d19 100644 --- a/YuMi/Modules/YMMonents/Api/Api+Monents.h +++ b/YuMi/Modules/YMMonents/Api/Api+Monents.h @@ -167,6 +167,10 @@ NS_ASSUME_NONNULL_BEGIN /// @param completion 完成 /// @param uid uid + (void)monentsUnReadCount:(HttpRequestHelperCompletion)completion uid:(NSString *)uid; +/// 屏蔽 +/// @param completion 完成 +/// @param type type为0 => 屏蔽动态, objId 为 动态id, type为1 => 屏蔽房间, objId 为 用户uid ++ (void)requesstShielding:(HttpRequestHelperCompletion)completion type:(NSString *)type objId:(NSString *)objId; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Api/Api+Monents.m b/YuMi/Modules/YMMonents/Api/Api+Monents.m index 842c68e0..2bd4ba1e 100644 --- a/YuMi/Modules/YMMonents/Api/Api+Monents.m +++ b/YuMi/Modules/YMMonents/Api/Api+Monents.m @@ -273,5 +273,10 @@ NSString * fang = [NSString stringFromBase64String:@"aW50ZXJhY3RpdmUvdW5yZWFkQ291bnQ="];///interactive/unreadCount [self makeRequest:fang method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, uid, nil]; } - +/// 屏蔽 +/// @param completion 完成 +/// @param type type为0 => 屏蔽动态, objId 为 动态id, type为1 => 屏蔽房间, objId 为 用户uid ++ (void)requesstShielding:(HttpRequestHelperCompletion)completion type:(NSString *)type objId:(NSString *)objId{ + [self makeRequest:[NSString stringWithFormat:@"%@%@%@",@"user/",@"black/",@"add"] method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, type,objId, nil]; +} @end diff --git a/YuMi/Modules/YMMonents/Model/MonentsInfoModel.h b/YuMi/Modules/YMMonents/Model/MonentsInfoModel.h index bdca6aa8..4bf7b511 100644 --- a/YuMi/Modules/YMMonents/Model/MonentsInfoModel.h +++ b/YuMi/Modules/YMMonents/Model/MonentsInfoModel.h @@ -1,19 +1,19 @@ // // MonentsInfoModel.h -// YUMI +// xplan-ios // -// Created by YUMI on 2022/5/11. +// Created by 冯硕 on 2022/5/11. // #import -#import "YUMINNNN.h" + #import "UserVipInfoVo.h" NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSInteger, MonentsContentType) { - ///纯文字的 - MonentsContentType_Text = 0, - ///图片 - MonentsContentType_Picture = 2 + ///纯文字的 + MonentsContentType_Text = 0, + ///图片 + MonentsContentType_Picture = 2 }; @class MonentsPicInfoModel; @interface MonentsInfoModel : NSObject @@ -47,8 +47,10 @@ typedef NS_ENUM(NSInteger, MonentsContentType) { @property (nonatomic,strong) NSString *experLevelPic; ///魅力等级 @property (nonatomic,strong) NSString *charmLevelPic; -///是否置顶 +///广场是否置顶 @property (nonatomic,assign) BOOL squareTop; +///话题是否置顶 +@property (nonatomic,assign) BOOL topicTop; ///贵族信息 @property (nonatomic, strong) UserVipInfoVo *userVipInfoVO; ///发布的内容 diff --git a/YuMi/Modules/YMMonents/Model/MonentsInfoModel.m b/YuMi/Modules/YMMonents/Model/MonentsInfoModel.m index 0fd0bf7b..8d1f9a6f 100644 --- a/YuMi/Modules/YMMonents/Model/MonentsInfoModel.m +++ b/YuMi/Modules/YMMonents/Model/MonentsInfoModel.m @@ -1,8 +1,8 @@ // // MonentsInfoModel.m -// YUMI +// xplan-ios // -// Created by YUMI on 2022/5/11. +// Created by 冯硕 on 2022/5/11. // #import "MonentsInfoModel.h" @@ -10,14 +10,14 @@ @implementation MonentsInfoModel - (instancetype)init { - if (self = [super init]) { - self.isFold = YES; - } - return self; + if (self = [super init]) { + self.isFold = YES; + } + return self; } + (NSDictionary *)objectClassInArray { - return @{@"dynamicResList":MonentsPicInfoModel.class}; + return @{@"dynamicResList":MonentsPicInfoModel.class}; } @end diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.h b/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.h index 290c1b4f..f86ebfc4 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.h @@ -43,6 +43,7 @@ NS_ASSUME_NONNULL_BEGIN /// @param dynamicId 动态的id /// @param content 评论的内容 - (void)commontMonents:(NSString *)dynamicId content:(NSString *)content; +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.m b/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.m index bd39d626..97c4ee19 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentDetailPresenter.m @@ -94,6 +94,11 @@ [[self getView] replyMonentsSuccess]; }] uid:uid dynamicId:dynamicId content:content commentId:commonId]; } +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{ + [Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] requesstShieldingSuccess:objId]; + }] type:type objId:objId]; +} diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.h b/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.h index 234a3931..c15ab2c8 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.h @@ -28,7 +28,8 @@ NS_ASSUME_NONNULL_BEGIN /// @param dynamicId 动态id /// @param worldId 话题id - (void)deleteMonents:(NSString *)dynamicId worldId:(NSString *)worldId; - +///屏蔽动态 +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.m b/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.m index d78b88a6..ae6603cc 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsAttentionPresenter.m @@ -52,5 +52,9 @@ } uid:uid dynamicId:dynamicId worldId:worldId]; } - +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{ + [Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] requesstShieldingSuccess:objId]; + }] type:type objId:objId]; +} @end diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.h b/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.h index 187a49c7..33d4dfa6 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.h @@ -28,6 +28,9 @@ NS_ASSUME_NONNULL_BEGIN /// @param dynamicId 动态id /// @param worldId 话题id - (void)deleteMonents:(NSString *)dynamicId worldId:(NSString *)worldId; + +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.m b/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.m index 7adfa351..432003aa 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsLatestPresenter.m @@ -51,5 +51,9 @@ [[self getView] deleteMonentsSuccess:dynamicId]; } uid:uid dynamicId:dynamicId worldId:worldId]; } - +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{ + [Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] requesstShieldingSuccess:objId]; + }] type:type objId:objId]; +} @end diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.h b/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.h index ed89597c..3927531a 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.h @@ -32,6 +32,9 @@ NS_ASSUME_NONNULL_BEGIN /// @param dynamicId 动态id /// @param worldId 话题id - (void)deleteMonents:(NSString *)dynamicId worldId:(NSString *)worldId; +///屏蔽 +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.m b/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.m index e1683435..73996732 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsRecommendPresenter.m @@ -65,5 +65,9 @@ [[self getView] deleteMonentsSuccess:dynamicId]; } uid:uid dynamicId:dynamicId worldId:worldId]; } - +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{ + [Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] requesstShieldingSuccess:objId]; + }] type:type objId:objId]; +} @end diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.h b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.h index 4ff93272..e63ac131 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.h @@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN /// @param dynamicId 动态id /// @param worldId 话题id - (void)deleteMonents:(NSString *)dynamicId worldId:(NSString *)worldId; +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.m b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.m index 33bd29b0..c2ca0a16 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicLatestPresenter.m @@ -44,5 +44,9 @@ [[self getView] deleteMonentsSuccess:dynamicId]; } uid:uid dynamicId:dynamicId worldId:worldId]; } - +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{ + [Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] requesstShieldingSuccess:objId]; + }] type:type objId:objId]; +} @end diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.h b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.h index 14a5ccf3..681fd227 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.h @@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN /// @param dynamicId 动态id /// @param worldId 话题id - (void)deleteMonents:(NSString *)dynamicId worldId:(NSString *)worldId; +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.m b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.m index 47c31995..0452b783 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsTopicRecommendPresenter.m @@ -44,4 +44,9 @@ [[self getView] deleteMonentsSuccess:dynamicId]; } uid:uid dynamicId:dynamicId worldId:worldId]; } +- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{ + [Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] requesstShieldingSuccess:objId]; + }] type:type objId:objId]; +} @end diff --git a/YuMi/Modules/YMMonents/Protocol/XPMonentsAttentionProtocol.h b/YuMi/Modules/YMMonents/Protocol/XPMonentsAttentionProtocol.h index 1c8926d3..45a52284 100644 --- a/YuMi/Modules/YMMonents/Protocol/XPMonentsAttentionProtocol.h +++ b/YuMi/Modules/YMMonents/Protocol/XPMonentsAttentionProtocol.h @@ -20,6 +20,8 @@ NS_ASSUME_NONNULL_BEGIN ///删除话题成功 - (void)deleteMonentsSuccess:(NSString *)monentsInfo; +///屏蔽 +- (void)requesstShieldingSuccess:(NSString *)monentsInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Protocol/XPMonentsDetailProtocol.h b/YuMi/Modules/YMMonents/Protocol/XPMonentsDetailProtocol.h index 1864a81f..fd060c71 100644 --- a/YuMi/Modules/YMMonents/Protocol/XPMonentsDetailProtocol.h +++ b/YuMi/Modules/YMMonents/Protocol/XPMonentsDetailProtocol.h @@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)commonMonentsSuccess; ///回复某人评论成功 - (void)replyMonentsSuccess; +///屏蔽 +- (void)requesstShieldingSuccess:(NSString *)monentsInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Protocol/XPMonentsLatestProtocol.h b/YuMi/Modules/YMMonents/Protocol/XPMonentsLatestProtocol.h index 5c86abd3..122b369d 100644 --- a/YuMi/Modules/YMMonents/Protocol/XPMonentsLatestProtocol.h +++ b/YuMi/Modules/YMMonents/Protocol/XPMonentsLatestProtocol.h @@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status; ///删除话题成功 - (void)deleteMonentsSuccess:(NSString *)monentsInfo; +///屏蔽 +- (void)requesstShieldingSuccess:(NSString *)monentsInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Protocol/XPMonentsRecommendProtocol.h b/YuMi/Modules/YMMonents/Protocol/XPMonentsRecommendProtocol.h index b2d07919..b24374ae 100644 --- a/YuMi/Modules/YMMonents/Protocol/XPMonentsRecommendProtocol.h +++ b/YuMi/Modules/YMMonents/Protocol/XPMonentsRecommendProtocol.h @@ -22,7 +22,8 @@ NS_ASSUME_NONNULL_BEGIN ///删除话题成功 - (void)deleteMonentsSuccess:(NSString *)monentsInfo; - +///屏蔽 +- (void)requesstShieldingSuccess:(NSString *)monentsInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicLatestProtocol.h b/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicLatestProtocol.h index b24ee993..9595c066 100644 --- a/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicLatestProtocol.h +++ b/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicLatestProtocol.h @@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN ///删除话题成功 - (void)deleteMonentsSuccess:(NSString *)monentsInfo; +///屏蔽 +- (void)requesstShieldingSuccess:(NSString *)monentsInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicRecommendProtocol.h b/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicRecommendProtocol.h index 292c920d..8d32100c 100644 --- a/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicRecommendProtocol.h +++ b/YuMi/Modules/YMMonents/Protocol/XPMonentsTopicRecommendProtocol.h @@ -20,6 +20,8 @@ NS_ASSUME_NONNULL_BEGIN ///删除话题成功 - (void)deleteMonentsSuccess:(NSString *)monentsInfo; +///屏蔽 +- (void)requesstShieldingSuccess:(NSString *)monentsInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.h b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.h index 6b7f8a09..70482e14 100644 --- a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.h +++ b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.h @@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic,strong) MonentsInfoModel *mineMonentsInfo; @property (nonatomic,strong) MonentsInfoModel *monentsInfo; @property (nonatomic,assign) BOOL isFillet; +@property (nonatomic,assign) BOOL isTopic;///是否是话题页 ///代理 @property (nonatomic,weak) id delegate; diff --git a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m index 07007cec..d6c7ee30 100644 --- a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m +++ b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m @@ -10,7 +10,6 @@ #import ///Tool - #import "NetImageView.h" #import "XPMonentsLayoutConfig.h" #import "SDPhotoBrowser.h" @@ -83,8 +82,8 @@ - (void)initDynamicSubViewConstraints { [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(15); - make.right.mas_equalTo(-15); + make.leading.mas_equalTo(15); + make.trailing.mas_equalTo(-15); make.top.bottom.equalTo(self.contentView); }]; @@ -95,8 +94,8 @@ }]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.backView).offset(12); - make.right.mas_equalTo(self.backView).offset(-12); + make.leading.mas_equalTo(self.backView).offset(12); + make.trailing.mas_equalTo(self.backView).offset(-12); make.top.mas_equalTo(13); }]; @@ -107,14 +106,14 @@ make.width.mas_equalTo(KScreenWidth-30); }]; [self.toolBarView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.backView); + make.leading.trailing.mas_equalTo(self.backView); make.top.mas_equalTo(self.stackView.mas_bottom).mas_offset(10); make.height.mas_equalTo(18); }]; [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kGetScaleWidth(1)); - make.left.right.equalTo(self.toolBarView).inset(12); + make.leading.trailing.equalTo(self.toolBarView).inset(12); make.bottom.equalTo(self.contentView); }]; } @@ -139,7 +138,7 @@ }]; [self.userInfoView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.mas_equalTo(self.backView); + make.leading.trailing.top.mas_equalTo(self.backView); make.height.mas_equalTo(kMONENTS_USER_INFO_HEIGHT); }]; @@ -148,8 +147,8 @@ }]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.backView).offset(kMONENTS_CONTENT_LEFT_PADDING); - make.right.mas_equalTo(self.backView).offset(-kMONENTS_CONTENT_RIGHT_PADDING); + make.leading.mas_equalTo(self.backView).offset(kMONENTS_CONTENT_LEFT_PADDING); + make.trailing.mas_equalTo(self.backView).offset(-kMONENTS_CONTENT_RIGHT_PADDING); make.top.mas_equalTo(self.userInfoView.mas_bottom).offset(kMONENTS_CONTENT_SPACAE_HEIGHT); }]; @@ -158,7 +157,7 @@ }]; [self.toolBarView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.backView); + make.leading.trailing.mas_equalTo(self.backView); make.top.mas_equalTo(self.stackView.mas_bottom); make.height.mas_equalTo(kMONENTS_TOOL_BAR_HEIGHT); }]; @@ -305,6 +304,7 @@ _monentsInfo = monentsInfo; if (_monentsInfo) { self.userInfoView.monentsInfo = _monentsInfo; + self.textView.isTopic = _isTopic; self.textView.monentsInfo = _monentsInfo; self.photoView.dynamicResList = _monentsInfo.dynamicResList; self.topicView.monentsInfo = _monentsInfo; @@ -326,7 +326,7 @@ self.topicView.hidden = monentsInfo.worldId <= 0; - if(_monentsInfo.squareTop && _monentsInfo.content.length == 0){ + if(_monentsInfo.topicTop && _monentsInfo.content.length == 0){ [self.textView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(contentHeight + 20); }]; diff --git a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTopicCollectionViewCell.m b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTopicCollectionViewCell.m index c0510cb3..e2b87837 100644 --- a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTopicCollectionViewCell.m +++ b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTopicCollectionViewCell.m @@ -1,24 +1,23 @@ // -// YMMonentsTopicCollectionViewCell.m -// YUMI +// XPMonentsTopicCollectionViewCell.m +// xplan-ios // -// Created by YUMI on 2022/5/18. +// Created by 冯硕 on 2022/5/18. // #import "XPMonentsTopicCollectionViewCell.h" ///Third #import ///Tool -#import "DJDKMIMOMColor.h" + #import "UIImage+Utils.h" -#import "NetImageView.h" ///Model #import "MonentsTopicModel.h" @interface XPMonentsTopicCollectionViewCell () ///背景 -@property (nonatomic,strong) NetImageView *topicImageView; +//@property (nonatomic,strong) UIImageView *topicImageView; ///显示话题前面的# @property (nonatomic,strong) UIImageView *iconImageView; ///显示话题 @@ -29,73 +28,87 @@ @implementation XPMonentsTopicCollectionViewCell - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - [self.contentView addSubview:self.topicImageView]; - [self.topicImageView addSubview:self.iconImageView]; - [self.topicImageView addSubview:self.topicLabel]; + self.backgroundColor = [UIColor clearColor]; + self.contentView.backgroundColor = [UIColor clearColor]; + [self.contentView addSubview:self.iconImageView]; + [self.contentView addSubview:self.topicLabel]; +// [self.contentView addSubview:self.topicImageView]; +// [self.topicImageView addSubview:self.iconImageView]; +// [self.topicImageView addSubview:self.topicLabel]; } - (void)initSubViewConstraints { - [self.topicImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.contentView); - }]; - - [self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.bottom.mas_equalTo(self.topicImageView); - make.height.mas_equalTo(30); - }]; - - [self.topicLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.topicImageView).inset(2); - make.bottom.mas_equalTo(self.topicImageView.mas_bottom).offset(-6); - }]; + [self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.contentView); + make.left.mas_equalTo(14); + make.width.height.mas_equalTo(10); + }]; + + [self.topicLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.right.equalTo(self.contentView); + make.left.equalTo(self.iconImageView.mas_right).mas_offset(5); + make.right.mas_equalTo(-5.5); + }]; + +// [self.topicImageView mas_makeConstraints:^(MASConstraintMaker *make) { +// make.edges.mas_equalTo(self.contentView); +// }]; +// +// [self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) { +// make.left.mas_equalTo(self.topicImageView).offset(7); +// make.size.mas_equalTo(CGSizeMake(16, 16)); +// make.centerY.mas_equalTo(self.topicImageView); +// }]; +// +// [self.topicLabel mas_makeConstraints:^(MASConstraintMaker *make) { +// make.left.mas_equalTo(self.iconImageView.mas_right).offset(2); +// make.centerY.mas_equalTo(self.topicImageView); +// }]; } #pragma mark - Getters And Setters - (void)setTopicInfo:(MonentsTopicModel *)topicInfo { - _topicInfo = topicInfo; - if (_topicInfo) { - self.topicLabel.text = [NSString stringWithFormat:@"#%@", _topicInfo.name]; - self.topicImageView.imageUrl = _topicInfo.icon; - } -} - -- (NetImageView *)topicImageView { - if (!_topicImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _topicImageView = [[NetImageView alloc] initWithConfig:config]; - _topicImageView.layer.masksToBounds = YES; - _topicImageView.layer.cornerRadius = 12; - _topicImageView.contentMode = UIViewContentModeScaleAspectFill; - } - return _topicImageView; + _topicInfo = topicInfo; + if (_topicInfo) { + self.topicLabel.text = _topicInfo.name; + } } +// +//- (UIImageView *)topicImageView { +// if (!_topicImageView) { +// _topicImageView = [[UIImageView alloc] init]; +// _topicImageView.userInteractionEnabled = YES; +// _topicImageView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFFFCDD), UIColorFromRGB(0xDFF9FF), UIColorFromRGB(0xF4E5FF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)]; +// _topicImageView.layer.masksToBounds = YES; +// _topicImageView.layer.cornerRadius = 13; +// } +// return _topicImageView; +//} - (UIImageView *)iconImageView { - if (!_iconImageView) { - _iconImageView = [[UIImageView alloc] init]; - _iconImageView.userInteractionEnabled = YES; - _iconImageView.image = [UIImage imageNamed:@"home_room_list_shadow_bg"]; - } - return _iconImageView; + if (!_iconImageView) { + _iconImageView = [[UIImageView alloc] init]; + _iconImageView.userInteractionEnabled = YES; + _iconImageView.image = [UIImage imageNamed:@"monents_info_topic_icon"]; + } + return _iconImageView; } - (UILabel *)topicLabel { - if (!_topicLabel) { - _topicLabel = [[UILabel alloc] init]; - _topicLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightBold]; - _topicLabel.textColor = [UIColor whiteColor]; - _topicLabel.textAlignment = NSTextAlignmentCenter; - } - return _topicLabel; + if (!_topicLabel) { + _topicLabel = [[UILabel alloc] init]; + _topicLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightRegular]; + _topicLabel.textColor = UIColorFromRGB(0x1F1A4E); + } + return _topicLabel; } @end diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMoentsTopicView.m b/YuMi/Modules/YMMonents/View/SubViews/XPMoentsTopicView.m index 690907d2..468aabfd 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMoentsTopicView.m +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMoentsTopicView.m @@ -1,15 +1,15 @@ // -// YMMoentsTopicView.m -// YUMI +// XPMoentsTopicView.m +// xplan-ios // -// Created by YUMI on 2022/5/12. +// Created by 冯硕 on 2022/5/12. // #import "XPMoentsTopicView.h" ///Third #import ///Tool -#import "DJDKMIMOMColor.h" + #import "UIImage+Utils.h" #import "NSString+Utils.h" ///Model @@ -24,111 +24,97 @@ @property (nonatomic,strong) UIImageView *iconImageView; ///显示话题 @property (nonatomic,strong) UILabel *topicLabel; -///显示时间 -@property (nonatomic,strong) UILabel *timeLabel; + @end @implementation XPMoentsTopicView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - [self addSubview:self.stackView]; - [self.stackView addArrangedSubview:self.topicImageView]; - [self.stackView addArrangedSubview:self.timeLabel]; - - [self.topicImageView addSubview:self.iconImageView]; - [self.topicImageView addSubview:self.topicLabel]; + [self addSubview:self.stackView]; + [self.stackView addArrangedSubview:self.topicImageView]; + [self.topicImageView addSubview:self.iconImageView]; + [self.topicImageView addSubview:self.topicLabel]; } - (void)initSubViewConstraints { - [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self); - }]; - - [self.topicImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.mas_equalTo(self.topicLabel.mas_right).offset(9); - }]; - - [self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.topicImageView).offset(9); - make.size.mas_equalTo(CGSizeMake(20, 20)); - make.centerY.mas_equalTo(self.topicImageView); - }]; - - [self.topicLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.iconImageView.mas_right).offset(4); - make.centerY.mas_equalTo(self.topicImageView); - }]; + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.bottom.mas_equalTo(self); + }]; + + [self.topicImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.topicLabel.mas_right).offset(9); + }]; + + [self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.topicImageView); + make.size.mas_equalTo(CGSizeMake(10, 10)); + make.centerY.mas_equalTo(self.topicImageView); + }]; + + [self.topicLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.iconImageView.mas_right).offset(4); + make.centerY.mas_equalTo(self.topicImageView); + }]; } #pragma mark - Getters And Setters - (void)setMonentsInfo:(MonentsInfoModel *)monentsInfo { - _monentsInfo = monentsInfo; - if (_monentsInfo) { - if (_monentsInfo.worldId > 0) { - self.topicImageView.hidden = NO; - self.topicLabel.text = _monentsInfo.worldName; - } else { - self.topicImageView.hidden = YES; - } - self.timeLabel.text = [NSString stringWithTimeStamp:_monentsInfo.publishTime]; - } + _monentsInfo = monentsInfo; + if (_monentsInfo) { + if (_monentsInfo.worldId > 0) { + self.topicLabel.text = _monentsInfo.worldName; + } + } } - (UIStackView *)stackView { - if (!_stackView) { - _stackView = [[UIStackView alloc] init]; - _stackView.axis = UILayoutConstraintAxisHorizontal; - _stackView.distribution = UIStackViewDistributionFill; - _stackView.alignment = UIStackViewAlignmentFill; - _stackView.spacing = 8; - } - return _stackView; + if (!_stackView) { + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisHorizontal; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentFill; + _stackView.spacing = 8; + } + return _stackView; } - (UIImageView *)topicImageView { - if (!_topicImageView) { - _topicImageView = [[UIImageView alloc] init]; - _topicImageView.userInteractionEnabled = YES; - _topicImageView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFFFCDD), UIColorFromRGB(0xDFF9FF), UIColorFromRGB(0xF4E5FF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)]; - _topicImageView.layer.masksToBounds = YES; - _topicImageView.layer.cornerRadius = 8; - } - return _topicImageView; + if (!_topicImageView) { + _topicImageView = [[UIImageView alloc] init]; + _topicImageView.userInteractionEnabled = YES; +// _topicImageView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFFFCDD), UIColorFromRGB(0xDFF9FF), UIColorFromRGB(0xF4E5FF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)]; + _topicImageView.layer.masksToBounds = YES; + _topicImageView.layer.cornerRadius = 8; + } + return _topicImageView; } - (UIImageView *)iconImageView { - if (!_iconImageView) { - _iconImageView = [[UIImageView alloc] init]; - _iconImageView.userInteractionEnabled = YES; - _iconImageView.image = [UIImage imageNamed:@"monents_info_topic_icon"]; - } - return _iconImageView; + if (!_iconImageView) { + _iconImageView = [[UIImageView alloc] init]; + _iconImageView.userInteractionEnabled = YES; + _iconImageView.image = [UIImage imageNamed:@"monents_info_topic_icon"]; + } + return _iconImageView; } - (UILabel *)topicLabel { - if (!_topicLabel) { - _topicLabel = [[UILabel alloc] init]; - _topicLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightBold]; - _topicLabel.textColor = [DJDKMIMOMColor mainTextColor]; - } - return _topicLabel; + if (!_topicLabel) { + _topicLabel = [[UILabel alloc] init]; + _topicLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightRegular]; + _topicLabel.textColor = [DJDKMIMOMColor mainTextColor]; + } + return _topicLabel; } -- (UILabel *)timeLabel { - if (!_timeLabel) { - _timeLabel = [[UILabel alloc] init]; - _timeLabel.font = [UIFont systemFontOfSize:10]; - _timeLabel.textColor = [DJDKMIMOMColor textThirdColor]; - } - return _timeLabel; -} + @end diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.h b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.h index 195d6e52..982feb03 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.h +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.h @@ -1,8 +1,8 @@ // -// YMMonentsContentView.h -// YUMI +// XPMonentsContentView.h +// xplan-ios // -// Created by YUMI on 2022/5/13. +// Created by 冯硕 on 2022/5/13. // #import @@ -18,13 +18,11 @@ NS_ASSUME_NONNULL_BEGIN @end @interface XPMonentsContentView : UIView +/// +@property (nonatomic,assign) BOOL isTopic; @property (nonatomic,strong) MonentsInfoModel *monentsInfo; ///代理 @property (nonatomic,weak) id delegate; - -/// 是否是审核UI -@property (nonatomic,assign) BOOL isSimple; - @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.m b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.m index a15e173e..13dd471a 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.m +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsContentView.m @@ -1,8 +1,8 @@ // -// YMMonentsContentView.m -// YUMI +// XPMonentsContentView.m +// xplan-ios // -// Created by YUMI on 2022/5/13. +// Created by 冯硕 on 2022/5/13. // #import "XPMonentsContentView.h" @@ -10,7 +10,7 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" + #import "XPMonentsLayoutConfig.h" #import "UIButton+EnlargeTouchArea.h" ///Model @@ -22,152 +22,173 @@ @property (nonatomic,strong) UILabel *contentLabel; ///折叠的按钮 @property (nonatomic,strong) UIButton *foldButton; +///显示时间 +@property (nonatomic,strong) UILabel *timeLabel; @end @implementation XPMonentsContentView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - [self addSubview:self.stackView]; - [self.stackView addArrangedSubview:self.contentLabel]; - [self.stackView addArrangedSubview:self.foldButton]; + + [self addSubview:self.stackView]; + [self.stackView addArrangedSubview:self.contentLabel]; + [self.stackView addArrangedSubview:self.foldButton]; + [self.stackView addArrangedSubview:self.timeLabel]; } - (void)initSubViewConstraints { - [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self); - }]; - - [self.foldButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); - }]; + + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self); + }]; + [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(14); + }]; + [self.foldButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); + }]; } - (NSAttributedString *)createMonentsContentAttribute { - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; - if (self.monentsInfo.squareTop ) {//动态/广场 - NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; - attachment.bounds = CGRectMake(0, 0, 25 * 1.3, 10 * 1.3); - attachment.image = [UIImage imageNamed:@"monents_info_top"]; - NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment]; - [attributedString insertAttributedString:starAttribute atIndex:0]; - } - [attributedString appendAttributedString:[self creatStrAttrByStr:self.monentsInfo.content attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}]]; - attributedString.yy_lineSpacing = 5; - attributedString.yy_lineBreakMode = NSLineBreakByWordWrapping; - return attributedString; + NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; + BOOL isTop = NO; + if(self.isTopic && self.monentsInfo.topicTop){ + isTop = YES; + }else{ + if (self.monentsInfo.squareTop ) { + isTop = YES; + } + } + if (isTop) {//动态/广场 + NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; + UIImage *iconImage = [UIImage imageNamed:@"monents_info_top"];; + attachment.bounds = CGRectMake(0, roundf(self.contentLabel.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height); + + attachment.image =iconImage; + NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment]; + [attributedString insertAttributedString:starAttribute atIndex:0]; + //将图片插入到合适的位置 +// [attributedString appendAttributedString:[self creatStrAttrByStr:YMLocalizedString(@"XPMonentsContentView0") attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName: UIColorFromRGB(0xE84C46)}]]; + } + [attributedString appendAttributedString:[self creatStrAttrByStr:self.monentsInfo.content attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}]]; + attributedString.yy_lineSpacing = 5; + attributedString.yy_lineBreakMode = NSLineBreakByWordWrapping; + return attributedString; } - (NSMutableAttributedString *)creatStrAttrByStr:(NSString *)str attributed:(NSDictionary *)attribute{ - if (str.length == 0 || !str) { - str = @" "; - } - NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str attributes:attribute]; - return attr; + if (str.length == 0 || !str) { + str = @" "; + } + NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str attributes:attribute]; + return attr; } #pragma mark - Event Response - (void)didClickFoldButton:(UIButton *)sender { - sender.selected = !sender.selected; - self.monentsInfo.isFold = !sender.selected; - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsContentView:didClickFold:)]) { - [self.delegate xPMonentsContentView:self didClickFold:self.monentsInfo]; - } + sender.selected = !sender.selected; + self.monentsInfo.isFold = !sender.selected; + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsContentView:didClickFold:)]) { + [self.delegate xPMonentsContentView:self didClickFold:self.monentsInfo]; + } } #pragma mark - Getters And Setters - -- (void)setIsSimple:(BOOL)isSimple { - _isSimple = isSimple; - self.contentLabel.preferredMaxLayoutWidth = isSimple ? kSIMPLE_MONENTS_CONTENT_MAX_WIDTH : kMONENTS_CONTENT_MAX_WIDTH; -} - - (void)setMonentsInfo:(MonentsInfoModel *)monentsInfo { - _monentsInfo = monentsInfo; - if (_monentsInfo) { - self.contentLabel.attributedText = [self createMonentsContentAttribute]; - self.foldButton.selected = !_monentsInfo.isFold; - if (monentsInfo.numberOfText <= 0) { - YYTextContainer *container = [YYTextContainer new]; - container.size = CGSizeMake(self.isSimple ? kSIMPLE_MONENTS_CONTENT_MAX_WIDTH : kMONENTS_CONTENT_MAX_WIDTH, CGFLOAT_MAX); - container.maximumNumberOfRows = 0; - YYTextLayout * layout = [YYTextLayout layoutWithContainer:container text:self.contentLabel.attributedText]; - if (layout.rowCount > 6) { - self.foldButton.hidden = NO; - [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); - }]; - } else { - self.foldButton.hidden = YES; - [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(0); - }]; - } - } else { - if (monentsInfo.numberOfText > 6) { - self.foldButton.hidden = NO; - [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); - }]; - } else { - self.foldButton.hidden = YES; - [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(0); - }]; - } - } - } + _monentsInfo = monentsInfo; + if (_monentsInfo) { + self.timeLabel.text = [NSString stringWithTimeStamp:_monentsInfo.publishTime]; + self.contentLabel.attributedText = [self createMonentsContentAttribute]; + self.foldButton.selected = !_monentsInfo.isFold; + if (monentsInfo.numberOfText <= 0) { + YYTextContainer *container = [YYTextContainer new]; + container.size = CGSizeMake(kMONENTS_CONTENT_MAX_WIDTH, CGFLOAT_MAX); + container.maximumNumberOfRows = 0; + YYTextLayout * layout = [YYTextLayout layoutWithContainer:container text:self.contentLabel.attributedText]; + if (layout.rowCount > 6) { + self.foldButton.hidden = NO; + [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); + }]; + } else { + self.foldButton.hidden = YES; + [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(0); + }]; + } + } else { + if (monentsInfo.numberOfText > 6) { + self.foldButton.hidden = NO; + [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); + }]; + } else { + self.foldButton.hidden = YES; + [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(0); + }]; + } + } + } } - (UIStackView *)stackView { - if (!_stackView) { - _stackView = [[UIStackView alloc] init]; - _stackView.axis = UILayoutConstraintAxisVertical; - _stackView.distribution = UIStackViewDistributionFill; - _stackView.alignment = UIStackViewAlignmentLeading; - _stackView.spacing = 0; - } - return _stackView; + if (!_stackView) { + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisVertical; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentLeading; + _stackView.spacing = 5; + } + return _stackView; } - (UIButton *)foldButton { - if (_foldButton == nil) { - _foldButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_foldButton setTitle:YMLocalizedString(@"XPMonentsContentView0") forState:UIControlStateNormal]; - [_foldButton setTitle:YMLocalizedString(@"XPMonentsContentView1") forState:UIControlStateSelected]; - [_foldButton setTitleColor:UIColorFromRGB(0x34A7FF) forState:UIControlStateNormal]; - [_foldButton setTitleColor:UIColorFromRGB(0x34A7FF) forState:UIControlStateSelected]; - _foldButton.titleLabel.font = [UIFont systemFontOfSize:15]; - _foldButton.hidden = YES; - [_foldButton addTarget:self action:@selector(didClickFoldButton:) forControlEvents:UIControlEventTouchUpInside]; - } - return _foldButton; + if (_foldButton == nil) { + _foldButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_foldButton setTitle:YMLocalizedString(@"XPMonentsContentView1") forState:UIControlStateNormal]; + [_foldButton setTitle:YMLocalizedString(@"XPMonentsContentView2") forState:UIControlStateSelected]; + [_foldButton setTitleColor:UIColorFromRGB(0x34A7FF) forState:UIControlStateNormal]; + [_foldButton setTitleColor:UIColorFromRGB(0x34A7FF) forState:UIControlStateSelected]; + _foldButton.titleLabel.font = [UIFont systemFontOfSize:15]; + _foldButton.hidden = YES; + [_foldButton addTarget:self action:@selector(didClickFoldButton:) forControlEvents:UIControlEventTouchUpInside]; + } + return _foldButton; } - (UILabel *)contentLabel { - if (!_contentLabel) { - _contentLabel = [[UILabel alloc] init]; - _contentLabel.numberOfLines = 0; - _contentLabel.font = [UIFont systemFontOfSize:15]; - _contentLabel.textColor = UIColorRGBAlpha(0x333333, 1); + if (!_contentLabel) { + _contentLabel = [[UILabel alloc] init]; + _contentLabel.numberOfLines = 0; + _contentLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular]; + _contentLabel.textColor = UIColorRGBAlpha(0x1F1A4E, 1); _contentLabel.preferredMaxLayoutWidth = kMONENTS_CONTENT_MAX_WIDTH; - _contentLabel.lineBreakMode = NSLineBreakByWordWrapping; + _contentLabel.lineBreakMode = NSLineBreakByWordWrapping; - } - return _contentLabel; + } + return _contentLabel; +} +- (UILabel *)timeLabel { + if (!_timeLabel) { + _timeLabel = [[UILabel alloc] init]; + _timeLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightRegular]; + _timeLabel.textColor = [DJDKMIMOMColor textThirdColor]; + } + return _timeLabel; } - @end diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsPhotoView.m b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsPhotoView.m index ba409d47..b06fc652 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsPhotoView.m +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsPhotoView.m @@ -1,18 +1,16 @@ // -// YMMonentsPhotoView.m -// YUMI +// XPMonentsPhotoView.m +// xplan-ios // -// Created by YUMI on 2022/5/12. +// Created by 冯硕 on 2022/5/12. // #import "XPMonentsPhotoView.h" ///Third #import ///Tool -#import "DJDKMIMOMColor.h" #import "NetImageView.h" #import "XPMonentsLayoutConfig.h" -#import "NSArray+Safe.h" ///Model #import "MonentsInfoModel.h" @@ -42,38 +40,38 @@ @implementation XPMonentsPhotoView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - [self addSubview:self.firstImageView]; - [self addSubview:self.secondImageView]; - [self addSubview:self.thirdImageView]; - [self addSubview:self.fourthImageView]; - [self addSubview:self.fifthImageView]; - [self addSubview:self.sixthImageView]; - [self addSubview:self.sevenImageView]; - [self addSubview:self.eighthImageView]; - [self addSubview:self.ninthImageView]; - self.subViewArray = @[self.firstImageView, self.secondImageView, self.thirdImageView, self.fourthImageView, self.fifthImageView, self.sixthImageView, self.sevenImageView, self.eighthImageView, self.ninthImageView]; + [self addSubview:self.firstImageView]; + [self addSubview:self.secondImageView]; + [self addSubview:self.thirdImageView]; + [self addSubview:self.fourthImageView]; + [self addSubview:self.fifthImageView]; + [self addSubview:self.sixthImageView]; + [self addSubview:self.sevenImageView]; + [self addSubview:self.eighthImageView]; + [self addSubview:self.ninthImageView]; + self.subViewArray = @[self.firstImageView, self.secondImageView, self.thirdImageView, self.fourthImageView, self.fifthImageView, self.sixthImageView, self.sevenImageView, self.eighthImageView, self.ninthImageView]; } - (void)hiddenAllImageView { - [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - obj.hidden = YES; - }]; + [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + obj.hidden = YES; + }]; } #pragma mark - Event Response - (void)tapImageView:(UITapGestureRecognizer *)tap { - NetImageView * imageView = (NetImageView *)tap.view; - if (imageView.imageUrl.length > 0 && self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsPhotoView:didClickImage:)]) { - [self.delegate xPMonentsPhotoView:self didClickImage:imageView.tag - 1001]; - } + NetImageView * imageView = (NetImageView *)tap.view; + if (imageView.imageUrl.length > 0 && self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsPhotoView:didClickImage:)]) { + [self.delegate xPMonentsPhotoView:self didClickImage:imageView.tag - 1001]; + } } @@ -144,222 +142,225 @@ } } + + - (void)setDynamicResList:(NSArray *)dynamicResList { - _dynamicResList = dynamicResList; - [self hiddenAllImageView]; - if (_dynamicResList.count == 0) { - - } else if (_dynamicResList.count == 1) { - self.firstImageView.hidden = NO; - [self.firstImageView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(kMONENTS_PIC_ONE_WIDTH, kMONENTS_PIC_ONE_WIDTH)); - make.left.top.mas_equalTo(self); - }]; - MonentsPicInfoModel * picInfo = [_dynamicResList safeObjectAtIndex1:0]; - self.firstImageView.imageUrl = picInfo.resUrl; - } else if(_dynamicResList.count == 2) { - self.firstImageView.hidden = NO; - CGFloat itemWidth = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE) / 2; - [self.firstImageView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(itemWidth, itemWidth)); - make.left.top.mas_equalTo(self); - }]; - - MonentsPicInfoModel * picInfo = [_dynamicResList safeObjectAtIndex1:0]; - self.firstImageView.imageUrl = picInfo.resUrl; - - self.secondImageView.hidden = NO; - [self.secondImageView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(itemWidth, itemWidth)); - make.top.mas_equalTo(self); - make.left.mas_equalTo(self.firstImageView.mas_right).offset(kMONENTS_PIC_SPACE); - }]; - - MonentsPicInfoModel * secondPicInfo = [_dynamicResList safeObjectAtIndex1:1]; - self.secondImageView.imageUrl = secondPicInfo.resUrl; - - } else{ - for (int i = 0; i < _dynamicResList.count; i++) { - MonentsPicInfoModel * picInfo = [_dynamicResList safeObjectAtIndex1:i]; - if (i < self.subViewArray.count) { - NetImageView * imageView = [self.subViewArray safeObjectAtIndex1:i]; - imageView.hidden = NO; - imageView.imageUrl = picInfo.resUrl; - } - } - - CGFloat itemWidth = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE * 2) / 3; - for (int i = 0; i < self.subViewArray.count; i++) { - NSInteger page = i % 3; - NSInteger line = i / 3; - NetImageView * imageView = [self.subViewArray safeObjectAtIndex1:i]; - [imageView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(itemWidth, itemWidth)); - make.left.mas_equalTo(page * (itemWidth + kMONENTS_PIC_SPACE)); - make.top.mas_equalTo(line * (itemWidth + kMONENTS_PIC_SPACE)); - }]; - } - - } + _dynamicResList = dynamicResList; + [self hiddenAllImageView]; + if (_dynamicResList.count == 0) { + + } else if (_dynamicResList.count == 1) { + self.firstImageView.hidden = NO; + [self.firstImageView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(kMONENTS_PIC_ONE_WIDTH, kMONENTS_PIC_ONE_WIDTH)); + make.left.top.mas_equalTo(self); + }]; + MonentsPicInfoModel * picInfo = [_dynamicResList safeObjectAtIndex1:0]; + self.firstImageView.imageUrl = picInfo.resUrl; + } else if(_dynamicResList.count == 2) { + self.firstImageView.hidden = NO; + CGFloat itemWidth = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE) / 2; + [self.firstImageView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(itemWidth, itemWidth)); + make.left.top.mas_equalTo(self); + }]; + + MonentsPicInfoModel * picInfo = [_dynamicResList safeObjectAtIndex1:0]; + self.firstImageView.imageUrl = picInfo.resUrl; + + self.secondImageView.hidden = NO; + [self.secondImageView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(itemWidth, itemWidth)); + make.top.mas_equalTo(self); + make.left.mas_equalTo(self.firstImageView.mas_right).offset(kMONENTS_PIC_SPACE); + }]; + + MonentsPicInfoModel * secondPicInfo = [_dynamicResList safeObjectAtIndex1:1]; + self.secondImageView.imageUrl = secondPicInfo.resUrl; + + } else{ + for (int i = 0; i < _dynamicResList.count; i++) { + MonentsPicInfoModel * picInfo = [_dynamicResList safeObjectAtIndex1:i]; + if (i < self.subViewArray.count) { + NetImageView * imageView = [self.subViewArray safeObjectAtIndex1:i]; + imageView.hidden = NO; + imageView.imageUrl = picInfo.resUrl; + } + } + + CGFloat itemWidth = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE * 2) / 3; + for (int i = 0; i < self.subViewArray.count; i++) { + NSInteger page = i % 3; + NSInteger line = i / 3; + NetImageView * imageView = [self.subViewArray safeObjectAtIndex1:i]; + if(imageView == nil)return; + [imageView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(itemWidth, itemWidth)); + make.left.mas_equalTo(page * (itemWidth + kMONENTS_PIC_SPACE)); + make.top.mas_equalTo(line * (itemWidth + kMONENTS_PIC_SPACE)); + }]; + } + + } } - (NetImageView *)firstImageView { - if (!_firstImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _firstImageView = [[NetImageView alloc] initWithConfig:config]; - _firstImageView.layer.masksToBounds = YES; - _firstImageView.layer.cornerRadius = 12; - _firstImageView.contentMode = UIViewContentModeScaleAspectFill; - _firstImageView.tag = 1000 + 1; - _firstImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_firstImageView addGestureRecognizer:tap]; - } - return _firstImageView; + if (!_firstImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _firstImageView = [[NetImageView alloc] initWithConfig:config]; + _firstImageView.layer.masksToBounds = YES; + _firstImageView.layer.cornerRadius = 12; + _firstImageView.contentMode = UIViewContentModeScaleAspectFill; + _firstImageView.tag = 1000 + 1; + _firstImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_firstImageView addGestureRecognizer:tap]; + } + return _firstImageView; } - (NetImageView *)secondImageView { - if (!_secondImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _secondImageView = [[NetImageView alloc] initWithConfig:config]; - _secondImageView.layer.masksToBounds = YES; - _secondImageView.layer.cornerRadius = 12; - _secondImageView.contentMode = UIViewContentModeScaleAspectFill; - _secondImageView.tag = 1000 + 2; - _secondImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_secondImageView addGestureRecognizer:tap]; - } - return _secondImageView; + if (!_secondImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _secondImageView = [[NetImageView alloc] initWithConfig:config]; + _secondImageView.layer.masksToBounds = YES; + _secondImageView.layer.cornerRadius = 12; + _secondImageView.contentMode = UIViewContentModeScaleAspectFill; + _secondImageView.tag = 1000 + 2; + _secondImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_secondImageView addGestureRecognizer:tap]; + } + return _secondImageView; } - (NetImageView *)thirdImageView { - if (!_thirdImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _thirdImageView = [[NetImageView alloc] initWithConfig:config]; - _thirdImageView.layer.masksToBounds = YES; - _thirdImageView.layer.cornerRadius = 12; - _thirdImageView.contentMode = UIViewContentModeScaleAspectFill; - _thirdImageView.tag = 1000 + 3; - _thirdImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_thirdImageView addGestureRecognizer:tap]; - } - return _thirdImageView; + if (!_thirdImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _thirdImageView = [[NetImageView alloc] initWithConfig:config]; + _thirdImageView.layer.masksToBounds = YES; + _thirdImageView.layer.cornerRadius = 12; + _thirdImageView.contentMode = UIViewContentModeScaleAspectFill; + _thirdImageView.tag = 1000 + 3; + _thirdImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_thirdImageView addGestureRecognizer:tap]; + } + return _thirdImageView; } - (NetImageView *)fourthImageView { - if (!_fourthImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _fourthImageView = [[NetImageView alloc] initWithConfig:config]; - _fourthImageView.layer.masksToBounds = YES; - _fourthImageView.layer.cornerRadius = 12; - _fourthImageView.contentMode = UIViewContentModeScaleAspectFill; - _fourthImageView.tag = 1000 + 4; - _fourthImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_fourthImageView addGestureRecognizer:tap]; - - } - return _fourthImageView; + if (!_fourthImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _fourthImageView = [[NetImageView alloc] initWithConfig:config]; + _fourthImageView.layer.masksToBounds = YES; + _fourthImageView.layer.cornerRadius = 12; + _fourthImageView.contentMode = UIViewContentModeScaleAspectFill; + _fourthImageView.tag = 1000 + 4; + _fourthImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_fourthImageView addGestureRecognizer:tap]; + + } + return _fourthImageView; } - (NetImageView *)fifthImageView { - if (!_fifthImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _fifthImageView = [[NetImageView alloc] initWithConfig:config]; - _fifthImageView.layer.masksToBounds = YES; - _fifthImageView.layer.cornerRadius = 12; - _fifthImageView.contentMode = UIViewContentModeScaleAspectFill; - _fifthImageView.tag = 1000 + 5; - _fifthImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_fifthImageView addGestureRecognizer:tap]; - } - return _fifthImageView; + if (!_fifthImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _fifthImageView = [[NetImageView alloc] initWithConfig:config]; + _fifthImageView.layer.masksToBounds = YES; + _fifthImageView.layer.cornerRadius = 12; + _fifthImageView.contentMode = UIViewContentModeScaleAspectFill; + _fifthImageView.tag = 1000 + 5; + _fifthImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_fifthImageView addGestureRecognizer:tap]; + } + return _fifthImageView; } - (NetImageView *)sixthImageView { - if (!_sixthImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _sixthImageView = [[NetImageView alloc] initWithConfig:config]; - _sixthImageView.layer.masksToBounds = YES; - _sixthImageView.layer.cornerRadius = 12; - _sixthImageView.contentMode = UIViewContentModeScaleAspectFill; - _sixthImageView.tag = 1000 + 6; - _sixthImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_sixthImageView addGestureRecognizer:tap]; - } - return _sixthImageView; + if (!_sixthImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _sixthImageView = [[NetImageView alloc] initWithConfig:config]; + _sixthImageView.layer.masksToBounds = YES; + _sixthImageView.layer.cornerRadius = 12; + _sixthImageView.contentMode = UIViewContentModeScaleAspectFill; + _sixthImageView.tag = 1000 + 6; + _sixthImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_sixthImageView addGestureRecognizer:tap]; + } + return _sixthImageView; } - (NetImageView *)sevenImageView { - if (!_sevenImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _sevenImageView = [[NetImageView alloc] initWithConfig:config]; - _sevenImageView.layer.masksToBounds = YES; - _sevenImageView.layer.cornerRadius = 12; - _sevenImageView.contentMode = UIViewContentModeScaleAspectFill; - _sevenImageView.tag = 1000 + 7; - _sevenImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_sevenImageView addGestureRecognizer:tap]; - } - return _sevenImageView; + if (!_sevenImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _sevenImageView = [[NetImageView alloc] initWithConfig:config]; + _sevenImageView.layer.masksToBounds = YES; + _sevenImageView.layer.cornerRadius = 12; + _sevenImageView.contentMode = UIViewContentModeScaleAspectFill; + _sevenImageView.tag = 1000 + 7; + _sevenImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_sevenImageView addGestureRecognizer:tap]; + } + return _sevenImageView; } - (NetImageView *)eighthImageView { - if (!_eighthImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _eighthImageView = [[NetImageView alloc] initWithConfig:config]; - _eighthImageView.layer.masksToBounds = YES; - _eighthImageView.layer.cornerRadius = 12; - _eighthImageView.contentMode = UIViewContentModeScaleAspectFill; - _eighthImageView.tag = 1000 + 8; - _eighthImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_eighthImageView addGestureRecognizer:tap]; - } - return _eighthImageView; + if (!_eighthImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _eighthImageView = [[NetImageView alloc] initWithConfig:config]; + _eighthImageView.layer.masksToBounds = YES; + _eighthImageView.layer.cornerRadius = 12; + _eighthImageView.contentMode = UIViewContentModeScaleAspectFill; + _eighthImageView.tag = 1000 + 8; + _eighthImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_eighthImageView addGestureRecognizer:tap]; + } + return _eighthImageView; } - (NetImageView *)ninthImageView { - if (!_ninthImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeMonentsPhoto; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _ninthImageView = [[NetImageView alloc] initWithConfig:config]; - _ninthImageView.layer.masksToBounds = YES; - _ninthImageView.layer.cornerRadius = 12; - _ninthImageView.contentMode = UIViewContentModeScaleAspectFill; - _ninthImageView.tag = 1000 + 9; - _ninthImageView.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [_ninthImageView addGestureRecognizer:tap]; - } - return _ninthImageView; + if (!_ninthImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeMonentsPhoto; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _ninthImageView = [[NetImageView alloc] initWithConfig:config]; + _ninthImageView.layer.masksToBounds = YES; + _ninthImageView.layer.cornerRadius = 12; + _ninthImageView.contentMode = UIViewContentModeScaleAspectFill; + _ninthImageView.tag = 1000 + 9; + _ninthImageView.userInteractionEnabled = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [_ninthImageView addGestureRecognizer:tap]; + } + return _ninthImageView; } diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsRecommendHeaderView.m b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsRecommendHeaderView.m index fe51c695..293fa112 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsRecommendHeaderView.m +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsRecommendHeaderView.m @@ -1,26 +1,32 @@ // -// YMMonentsRecommendHeaderView.m -// YUMI +// XPMonentsRecommendHeaderView.m +// xplan-ios // -// Created by YUMI on 2022/5/18. +// Created by 冯硕 on 2022/5/18. // #import "XPMonentsRecommendHeaderView.h" ///Third #import -///Tool -#import "DJDKMIMOMColor.h" -#import "NSArray+Safe.h" + ///Model #import "MonentsTopicModel.h" ///View #import "XPMonentsTopicCollectionViewCell.h" -@interface XPMonentsRecommendHeaderView () +@interface XPMonentsRecommendHeaderView () +///背景图 +@property (nonatomic,strong) UIImageView *bgView; + +///titile背景 +@property (nonatomic,strong) UIImageView *titleBgView; + ///显示标题 @property (nonatomic,strong) UILabel *titleLabel; ///显示箭头 -@property (nonatomic,strong) UIButton *arrowButton; +//@property (nonatomic,strong) UIButton *arrowButton; +///列表背景 +@property (nonatomic,strong) UIView *collectionBgView; ///列表 @property (nonatomic,strong) UICollectionView *collectionView; @@ -29,115 +35,182 @@ @implementation XPMonentsRecommendHeaderView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - self.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor]; - [self addSubview:self.titleLabel]; - [self addSubview:self.arrowButton]; - [self addSubview:self.collectionView]; + self.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor]; + [self addSubview:self.bgView]; + [self.bgView addSubview:self.collectionBgView]; + [self.collectionBgView addSubview:self.collectionView]; + [self.bgView addSubview:self.titleBgView]; + [self.titleBgView addSubview:self.titleLabel]; + } - (void)initSubViewConstraints { - [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self).offset(15); - make.top.mas_equalTo(self).offset(15); - }]; - - [self.arrowButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(11, 20)); - make.centerY.mas_equalTo(self.titleLabel); - make.right.mas_equalTo(self).offset(-15); - }]; - - [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self); - make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(10); - make.height.mas_equalTo(77); - }]; + + [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(16); + make.right.mas_offset(-15); + make.left.mas_offset(15); + make.bottom.mas_equalTo(-20); + }]; +// [self.collectionBgView mas_makeConstraints:^(MASConstraintMaker *make) { +// make.top.mas_equalTo(10); +// make.left.mas_equalTo(10); +// make.right.mas_equalTo(-10); +// make.bottom.mas_equalTo(-10); +// }]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(15); + make.left.right.equalTo(self.collectionBgView); + make.height.mas_equalTo(69); + }]; + [self.titleBgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.left.equalTo(self.bgView); + make.width.mas_equalTo(74); + make.height.mas_equalTo(21); + }]; + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.titleBgView); + }]; + +// [self.arrowButton mas_makeConstraints:^(MASConstraintMaker *make) { +// make.size.mas_equalTo(CGSizeMake(11, 20)); +// make.centerY.mas_equalTo(self.titleLabel); +// make.right.mas_equalTo(self).offset(-15); +// }]; + + } #pragma mark - UICollectionViewDelegate And UICollectionViewDatasource - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.topicList.count; + return self.topicList.count; } -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake(125, 77); -} +//- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { +// MonentsTopicModel * topicModel = [self.topicList safeObjectWithIndex:indexPath.row]; +// CGFloat itemWidth = [topicModel.name boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10 weight:UIFontWeightBold]} context:nil].size.width; +// return CGSizeMake(itemWidth +34, 26); +//} - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - XPMonentsTopicCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMonentsTopicCollectionViewCell class]) forIndexPath:indexPath]; - cell.topicInfo = [self.topicList safeObjectAtIndex1:indexPath.row]; - return cell; + XPMonentsTopicCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMonentsTopicCollectionViewCell class]) forIndexPath:indexPath]; + + cell.topicInfo = [self.topicList safeObjectAtIndex1:indexPath.row]; + + return cell; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - [collectionView deselectItemAtIndexPath:indexPath animated:YES]; - if (self.topicList.count > 0) { - MonentsTopicModel * topicInfo = [self.topicList safeObjectAtIndex1:indexPath.row]; - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsRecommendHeaderView:didSelectItem:)]) { - [self.delegate xPMonentsRecommendHeaderView:self didSelectItem:topicInfo]; - } - } + [collectionView deselectItemAtIndexPath:indexPath animated:YES]; + if (self.topicList.count > 0) { + MonentsTopicModel * topicInfo = [self.topicList safeObjectAtIndex1:indexPath.row]; + if(topicInfo == nil)return; + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsRecommendHeaderView:didSelectItem:)]) { + [self.delegate xPMonentsRecommendHeaderView:self didSelectItem:topicInfo]; + } + } } #pragma mark - Event Response - (void)arrowButtonAction:(UIButton *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsRecommendHeaderView:didClickMoreTopic:)]) { - [self.delegate xPMonentsRecommendHeaderView:self didClickMoreTopic:sender]; - } + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsRecommendHeaderView:didClickMoreTopic:)]) { + [self.delegate xPMonentsRecommendHeaderView:self didClickMoreTopic:sender]; + } } #pragma mark - Getters And Setters - (void)setTopicList:(NSArray *)topicList { - _topicList = topicList; - [self.collectionView reloadData]; + _topicList = topicList; + [self.collectionView reloadData]; } - (UILabel *)titleLabel { - if (!_titleLabel) { - _titleLabel = [[UILabel alloc] init]; - _titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; - _titleLabel.textColor = [DJDKMIMOMColor mainTextColor]; - _titleLabel.text = YMLocalizedString(@"XPMonentsRecommendHeaderView0"); - } - return _titleLabel; + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.font = [UIFont systemFontOfSize:15 weight:UIFontWeightMedium]; + _titleLabel.textColor = UIColorFromRGB(0x0D344D); + _titleLabel.text = YMLocalizedString(@"XPMonentsRecommendHeaderView0"); + } + return _titleLabel; } -- (UIButton *)arrowButton { - if (!_arrowButton) { - _arrowButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateNormal]; - [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateSelected]; - [_arrowButton addTarget:self action:@selector(arrowButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _arrowButton; -} +//- (UIButton *)arrowButton { +// if (!_arrowButton) { +// _arrowButton = [UIButton buttonWithType:UIButtonTypeCustom]; +// [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateNormal]; +// [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateSelected]; +// [_arrowButton addTarget:self action:@selector(arrowButtonAction:) forControlEvents:UIControlEventTouchUpInside]; +// } +// return _arrowButton; +//} - (UICollectionView *)collectionView{ - if (!_collectionView) { - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 0); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - layout.minimumLineSpacing = 8; - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - _collectionView.dataSource = self; - _collectionView.delegate = self; - _collectionView.backgroundColor = [UIColor clearColor]; - _collectionView.showsHorizontalScrollIndicator = NO; - [_collectionView registerClass:[XPMonentsTopicCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMonentsTopicCollectionViewCell class])]; - } - return _collectionView; + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.sectionInset = UIEdgeInsetsMake(0,0, 0, 0); + layout.itemSize = CGSizeMake((KScreenWidth - 50)/2, 18); + layout.minimumLineSpacing = 0; + layout.minimumInteritemSpacing = 0; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.pagingEnabled = YES; + _collectionView.showsHorizontalScrollIndicator = NO; + [_collectionView registerClass:[XPMonentsTopicCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMonentsTopicCollectionViewCell class])]; + } + return _collectionView; +} +- (UIView *)collectionBgView{ + if (!_collectionBgView){ + + UIView *view = [[UIView alloc] init]; + view.frame = CGRectMake(10,10,KScreenWidth - 50,89); + view.layer.borderWidth = 0.5; + view.layer.borderColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0].CGColor; + + view.layer.backgroundColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.6300].CGColor; + + // blur + UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; + UIVisualEffectView *visualView = [[UIVisualEffectView alloc]initWithEffect:blurEffect]; + visualView.frame = CGRectMake(10,10,KScreenWidth - 50,89); + view.layer.cornerRadius = 8; + _collectionBgView = view; + _collectionView.userInteractionEnabled = YES; + } + return _collectionBgView; +} +- (UIImageView *)bgView{ + if (!_bgView){ + _bgView = [UIImageView new]; + UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0x9FF4F2),UIColorFromRGB(0x96D6FF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(KScreenWidth - 30, 109)]; + _bgView.image = image; + [_bgView setCornerWithLeftTopCorner:10 rightTopCorner:10 bottomLeftCorner:10 bottomRightCorner:10 size:CGSizeMake(KScreenWidth - 30, 109)]; + _bgView.userInteractionEnabled = YES; + } + return _bgView; +} +-(UIImageView *)titleBgView{ + if (!_titleBgView){ + _titleBgView = [UIImageView new]; + UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0x83E8E7),UIColorFromRGB(0x86D4F6)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(74, 21)]; + _titleBgView.image = image; + [_titleBgView setCornerWithLeftTopCorner:10 rightTopCorner:0 bottomLeftCorner:0 bottomRightCorner:10 size:CGSizeMake(74, 21)]; + _titleBgView.userInteractionEnabled = YES; + } + return _titleBgView; } - - @end diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.h b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.h index d8852d15..73ec6f04 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.h +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.h @@ -1,8 +1,8 @@ // -// YMMonentsUserInfoView.h -// YUMI +// XPMonentsUserInfoView.h +// xplan-ios // -// Created by YUMI on 2022/5/12. +// Created by 冯硕 on 2022/5/12. // #import @@ -17,6 +17,9 @@ NS_ASSUME_NONNULL_BEGIN ///点击了跟随进房 - (void)xPMonentsUserInfoView:(XPMonentsUserInfoView *)view didClickEnterRoom:(MonentsInfoModel *)monents; +///删除 +- (void)xPMonentsTooBarView:(XPMonentsUserInfoView *)view didClickDelete:(MonentsInfoModel *)monentsInfo; + @end @interface XPMonentsUserInfoView : UIView ///动态信息 diff --git a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.m b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.m index 5466f0aa..fe2afe22 100644 --- a/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.m +++ b/YuMi/Modules/YMMonents/View/SubViews/XPMonentsUserInfoView.m @@ -1,21 +1,24 @@ // -// YMMonentsUserInfoView.m -// YUMI +// XPMonentsUserInfoView.m +// xplan-ios // -// Created by YUMI on 2022/5/12. +// Created by 冯硕 on 2022/5/12. // #import "XPMonentsUserInfoView.h" ///Third #import ///Tool -#import "DJDKMIMOMColor.h" + #import "NetImageView.h" #import "SpriteSheetImageManager.h" -#import "YUMIMacroUitls.h" +#import "TTPopup.h" +#import "XPWebViewController.h" +#import "XCCurrentVCStackManager.h" +#import "AccountInfoStorage.h" +#import "UIButton+EnlargeTouchArea.h" ///Model #import "MonentsInfoModel.h" -#import "NSArray+Safe.h" @interface XPMonentsUserInfoView () /// @@ -58,410 +61,436 @@ @property (nonatomic,strong) NetImageView *thirdTagImageView; ///直播中 @property (nonatomic,strong) UIButton *onlineButton; + @end @implementation XPMonentsUserInfoView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - [self addSubview:self.avatarImageView]; - [self addSubview:self.headWearImageView]; - [self addSubview:self.nickLabel]; - [self addSubview:self.sexImageView]; - [self addSubview:self.tagStackView]; - [self addSubview:self.levelStackView]; - [self addSubview:self.onlineButton]; - - [self.tagStackView addArrangedSubview:self.firstTagImageView]; - [self.tagStackView addArrangedSubview:self.secondTagImageView]; - [self.tagStackView addArrangedSubview:self.thirdTagImageView]; + [self addSubview:self.avatarImageView]; + [self addSubview:self.headWearImageView]; + [self addSubview:self.nickLabel]; + [self addSubview:self.sexImageView]; + [self addSubview:self.tagStackView]; + [self addSubview:self.levelStackView]; + [self addSubview:self.onlineButton]; + + [self.tagStackView addArrangedSubview:self.firstTagImageView]; + [self.tagStackView addArrangedSubview:self.secondTagImageView]; + [self.tagStackView addArrangedSubview:self.thirdTagImageView]; - [self.levelStackView addArrangedSubview:self.nobleImageView]; - [self.levelStackView addArrangedSubview:self.newsUserImageView]; - [self.levelStackView addArrangedSubview:self.officalImageView]; - [self.levelStackView addArrangedSubview:self.experImageView]; - [self.levelStackView addArrangedSubview:self.charmImageView]; - [self.levelStackView addArrangedSubview:self.namePlateView]; - ///铭牌 - [self.namePlateView addSubview:self.nameplateImageView]; - [self.namePlateView addSubview:self.nameplateLabel]; - + [self.levelStackView addArrangedSubview:self.nobleImageView]; + [self.levelStackView addArrangedSubview:self.newsUserImageView]; + [self.levelStackView addArrangedSubview:self.officalImageView]; + [self.levelStackView addArrangedSubview:self.experImageView]; + [self.levelStackView addArrangedSubview:self.charmImageView]; + [self.levelStackView addArrangedSubview:self.namePlateView]; + ///铭牌 + [self.namePlateView addSubview:self.nameplateImageView]; + [self.namePlateView addSubview:self.nameplateLabel]; + } - (void)initSubViewConstraints { - [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(40, 40)); - make.left.mas_equalTo(self).offset(15); - make.top.mas_equalTo(self).offset(15); - }]; - - [self.headWearImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.mas_equalTo(self.avatarImageView); - make.width.mas_equalTo(self.avatarImageView.mas_width).multipliedBy(1.2); - make.height.mas_equalTo(self.headWearImageView.mas_width); - }]; - - [self.nickLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.avatarImageView.mas_right).offset(12); - make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-2); - }]; - - [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(14, 14)); - make.left.mas_equalTo(self.nickLabel.mas_right).offset(4); - make.centerY.mas_equalTo(self.nickLabel); - }]; - - [self.levelStackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.nickLabel); - make.top.mas_equalTo(self.avatarImageView.mas_centerY).offset(2); - make.height.mas_equalTo(20); - }]; + - [self.nobleImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(20); - }]; - - [self.newsUserImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(20); - }]; - - [self.officalImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(20); - }]; - - [self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(20); - }]; - - [self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(20); - }]; - - [self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(self.nameplateImageView.mas_width); - }]; + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(50, 50)); + make.left.mas_equalTo(self).offset(15); + make.centerY.mas_equalTo(self); + }]; + + [self.headWearImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.mas_equalTo(self.avatarImageView); + make.width.mas_equalTo(self.avatarImageView.mas_width).multipliedBy(1.2); + make.height.mas_equalTo(self.headWearImageView.mas_width); + }]; - [self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(20); - make.width.mas_equalTo(60); - make.left.top.mas_equalTo(self.namePlateView); - }]; - - [self.nameplateLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.mas_equalTo(self.nameplateImageView); - make.right.mas_equalTo(self.namePlateView).offset(-2); - }]; - - [self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.mas_equalTo(self).offset(-15); - make.centerY.mas_equalTo(self.nickLabel); - make.height.mas_equalTo(14); - }]; + + [self.nickLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.avatarImageView.mas_right).offset(12); + make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-2); + }]; + + [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(14, 14)); + make.left.mas_equalTo(self.nickLabel.mas_right).offset(4); + make.centerY.mas_equalTo(self.nickLabel); + }]; + + [self.levelStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nickLabel); + make.top.mas_equalTo(self.avatarImageView.mas_centerY).offset(2); + make.height.mas_equalTo(20); + }]; - [self.onlineButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(55, 18)); - make.right.mas_equalTo(self.tagStackView); - make.top.mas_equalTo(self.tagStackView.mas_bottom).offset(4); - }]; - - [self.firstTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(28); - }]; - - [self.secondTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(self.firstTagImageView); - }]; - - [self.thirdTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(self.firstTagImageView); - }]; + [self.nobleImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(20); + }]; + + [self.newsUserImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(20); + }]; + + [self.officalImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(20); + }]; + + [self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(20); + }]; + + [self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(20); + }]; + + [self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(self.nameplateImageView.mas_width); + }]; + + [self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(20); + make.width.mas_equalTo(60); + make.left.top.mas_equalTo(self.namePlateView); + }]; + + [self.nameplateLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.bottom.mas_equalTo(self.nameplateImageView); + make.right.mas_equalTo(self.namePlateView).offset(-2); + }]; + + [self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self).offset(-15); + make.centerY.mas_equalTo(self.nickLabel); + make.height.mas_equalTo(14); + }]; + + [self.onlineButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(55, 18)); + make.right.mas_equalTo(-15); + make.top.equalTo(self.tagStackView.mas_bottom).mas_offset(8); + }]; + + [self.firstTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(28); + }]; + + [self.secondTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(self.firstTagImageView); + }]; + + [self.thirdTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(self.firstTagImageView); + }]; } #pragma mark - Event Response - (void)onlineButtonAction:(UIButton *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsUserInfoView:didClickEnterRoom:)]) { - [self.delegate xPMonentsUserInfoView:self didClickEnterRoom:self.monentsInfo]; - } + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsUserInfoView:didClickEnterRoom:)]) { + [self.delegate xPMonentsUserInfoView:self didClickEnterRoom:self.monentsInfo]; + } } - (void)didTapAvatarGuest { - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsUserInfoView:didClickAvatar:)]) { - [self.delegate xPMonentsUserInfoView:self didClickAvatar:self.monentsInfo]; - } + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsUserInfoView:didClickAvatar:)]) { + [self.delegate xPMonentsUserInfoView:self didClickAvatar:self.monentsInfo]; + } } +- (void)reportButtonAction:(UIButton *)sender { + TTActionSheetConfig *action; + if (self.monentsInfo.uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) { + action = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMonentsUserInfoView0") clickAction:^{ + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsTooBarView:didClickDelete:)]) { + [self.delegate xPMonentsTooBarView:self didClickDelete:self.monentsInfo]; + } + }]; + } else { + action = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMonentsUserInfoView1") clickAction:^{ + NSString * url= [NSString stringWithFormat:@"%@?reportUid=%@&source=%@", URLWithType(kReportRoomURL),self.monentsInfo.uid, @"WORLDDYNAMIC"]; + XPWebViewController * webVC = [[XPWebViewController alloc] init]; + webVC.url = url; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:webVC animated:YES]; + }]; + } + [TTPopup actionSheetWithItems:@[action]]; +} #pragma mark - Getters And Setters - (void)setMonentsInfo:(MonentsInfoModel *)monentsInfo { - _monentsInfo = monentsInfo; - if (_monentsInfo) { - self.avatarImageView.imageUrl = _monentsInfo.avatar; - NSString * nick = _monentsInfo.nick; - if (nick.length > 8) { - nick = [NSString stringWithFormat:@"%@…", [nick substringToIndex:8]]; - } - self.nickLabel.text = nick.length > 0 ? nick : @""; - self.sexImageView.image = _monentsInfo.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; - self.officalImageView.hidden = _monentsInfo.defUser != 2; - self.newsUserImageView.hidden = !_monentsInfo.newUser; - self.nobleImageView.hidden = !_monentsInfo.userVipInfoVO; - if (_monentsInfo.experLevelPic) { - self.experImageView.imageUrl = _monentsInfo.experLevelPic; - } - self.experImageView.hidden = _monentsInfo.experLevelPic.length <= 0; - - if (_monentsInfo.charmLevelPic) { - self.charmImageView.imageUrl = _monentsInfo.charmLevelPic; - } + _monentsInfo = monentsInfo; + if (_monentsInfo) { + self.avatarImageView.imageUrl = _monentsInfo.avatar; + NSString * nick = _monentsInfo.nick; + if (nick.length > 8) { + nick = [NSString stringWithFormat:@"%@…", [nick substringToIndex:8]]; + } + self.nickLabel.text = nick.length > 0 ? nick : @""; + self.sexImageView.image = _monentsInfo.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; + self.officalImageView.hidden = _monentsInfo.defUser != 2; + self.newsUserImageView.hidden = !_monentsInfo.newUser; + self.nobleImageView.hidden = !_monentsInfo.userVipInfoVO; + if (_monentsInfo.experLevelPic) { + self.experImageView.imageUrl = _monentsInfo.experLevelPic; + } + self.experImageView.hidden = _monentsInfo.experLevelPic.length <= 0; + + if (_monentsInfo.charmLevelPic) { + self.charmImageView.imageUrl = _monentsInfo.charmLevelPic; + } - if (_monentsInfo.userVipInfoVO) { - self.nobleImageView.imageUrl = _monentsInfo.userVipInfoVO.vipIcon; - } + if (_monentsInfo.userVipInfoVO) { + self.nobleImageView.imageUrl = _monentsInfo.userVipInfoVO.vipIcon; + } - self.charmImageView.hidden = _monentsInfo.charmLevelPic.length <= 0; - - if (_monentsInfo.nameplateWord.length>0 && _monentsInfo.nameplatePic.length>0) { - self.nameplateImageView.imageUrl = _monentsInfo.nameplatePic; - self.nameplateLabel.text = _monentsInfo.nameplateWord; - self.namePlateView.hidden = NO; - } else { - self.namePlateView.hidden = YES; - } + self.charmImageView.hidden = _monentsInfo.charmLevelPic.length <= 0; + + if (_monentsInfo.nameplateWord.length>0 && _monentsInfo.nameplatePic.length>0) { + self.nameplateImageView.imageUrl = _monentsInfo.nameplatePic; + self.nameplateLabel.text = _monentsInfo.nameplateWord; + self.namePlateView.hidden = NO; + } else { + self.namePlateView.hidden = YES; + } - - NSString * headwearUrl= _monentsInfo.headwearEffect.length > 0 ? _monentsInfo.headwearEffect : _monentsInfo.headwearPic; - self.headWearImageView.hidden = headwearUrl.length <= 0; - if (headwearUrl.length > 0) { - NSURL *url = [NSURL URLWithString:headwearUrl]; - @kWeakify(self); - [self.manager loadSpriteSheetImageWithURL:url completionBlock:^(YYSpriteSheetImage * _Nullable sprit) { - @kStrongify(self); - self.headWearImageView.image = sprit; - } failureBlock:^(NSError * _Nullable error) { - }]; - } - self.firstTagImageView.hidden = YES; - self.secondTagImageView.hidden = YES; - self.thirdTagImageView.hidden = YES; - for (int i = 0; i< _monentsInfo.labelList.count; i++) { - NSString * imageUrl = [_monentsInfo.labelList safeObjectAtIndex1:i]; - if (i < self.tagStackView.subviews.count) { - NetImageView * image = [self.tagStackView.subviews safeObjectAtIndex1:i]; - image.hidden = NO; - image.imageUrl = imageUrl; - } - } - self.onlineButton.hidden = _monentsInfo.inRoomUid.length <= 0; - } + + NSString * headwearUrl= _monentsInfo.headwearEffect.length > 0 ? _monentsInfo.headwearEffect : _monentsInfo.headwearPic; + self.headWearImageView.hidden = headwearUrl.length <= 0; + if (headwearUrl.length > 0) { + NSURL *url = [NSURL URLWithString:headwearUrl]; + @kWeakify(self); + [self.manager loadSpriteSheetImageWithURL:url completionBlock:^(YYSpriteSheetImage * _Nullable sprit) { + @kStrongify(self); + self.headWearImageView.image = sprit; + } failureBlock:^(NSError * _Nullable error) { + }]; + } + self.firstTagImageView.hidden = YES; + self.secondTagImageView.hidden = YES; + self.thirdTagImageView.hidden = YES; + for (int i = 0; i< _monentsInfo.labelList.count; i++) { + NSString * imageUrl = [_monentsInfo.labelList safeObjectAtIndex1:i]; + if (i < self.tagStackView.subviews.count) { + NetImageView * image = [self.tagStackView.subviews safeObjectAtIndex1:i]; + if(image != nil){ + image.hidden = NO; + image.imageUrl = imageUrl; + } + } + } + self.onlineButton.hidden = _monentsInfo.inRoomUid.length <= 0; + } } - (SpriteSheetImageManager *)manager { - if (!_manager) { - _manager = [[SpriteSheetImageManager alloc] init]; - } - return _manager; + if (!_manager) { + _manager = [[SpriteSheetImageManager alloc] init]; + } + return _manager; } - (YYAnimatedImageView *)headWearImageView { - if (!_headWearImageView) { - _headWearImageView = [[YYAnimatedImageView alloc] init]; - _headWearImageView.backgroundColor = [UIColor clearColor]; - _headWearImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _headWearImageView; + if (!_headWearImageView) { + _headWearImageView = [[YYAnimatedImageView alloc] init]; + _headWearImageView.backgroundColor = [UIColor clearColor]; + _headWearImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _headWearImageView; } - (NetImageView *)avatarImageView { - if (!_avatarImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserIcon; - _avatarImageView = [[NetImageView alloc] initWithConfig:config]; - _avatarImageView.userInteractionEnabled = YES; - _avatarImageView.layer.masksToBounds = YES; - _avatarImageView.layer.cornerRadius = 20; - _avatarImageView.contentMode = UIViewContentModeScaleAspectFill; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAvatarGuest)]; - [_avatarImageView addGestureRecognizer:tap]; - } - return _avatarImageView; + if (!_avatarImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserIcon; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.userInteractionEnabled = YES; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = 25; + _avatarImageView.contentMode = UIViewContentModeScaleAspectFill; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAvatarGuest)]; + [_avatarImageView addGestureRecognizer:tap]; + } + return _avatarImageView; } - (UILabel *)nickLabel { - if (!_nickLabel) { - _nickLabel = [[UILabel alloc] init]; - _nickLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; - _nickLabel.textColor = [DJDKMIMOMColor mainTextColor]; - } - return _nickLabel; + if (!_nickLabel) { + _nickLabel = [[UILabel alloc] init]; + _nickLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; + _nickLabel.textColor = [DJDKMIMOMColor mainTextColor]; + } + return _nickLabel; } - (UIImageView *)sexImageView { - if (!_sexImageView) { - _sexImageView = [[UIImageView alloc] init]; - _sexImageView.userInteractionEnabled = YES; - } - return _sexImageView; + if (!_sexImageView) { + _sexImageView = [[UIImageView alloc] init]; + _sexImageView.userInteractionEnabled = YES; + } + return _sexImageView; } - (UIStackView *)levelStackView { - if (!_levelStackView) { - _levelStackView = [[UIStackView alloc] init]; - _levelStackView.axis = UILayoutConstraintAxisHorizontal; - _levelStackView.distribution = UIStackViewDistributionFill; - _levelStackView.alignment = UIStackViewAlignmentFill; - _levelStackView.spacing = 2; - } - return _levelStackView; + if (!_levelStackView) { + _levelStackView = [[UIStackView alloc] init]; + _levelStackView.axis = UILayoutConstraintAxisHorizontal; + _levelStackView.distribution = UIStackViewDistributionFill; + _levelStackView.alignment = UIStackViewAlignmentFill; + _levelStackView.spacing = 2; + } + return _levelStackView; } - (NetImageView *)experImageView { - if (!_experImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _experImageView = [[NetImageView alloc] initWithConfig:config]; - _experImageView.userInteractionEnabled = YES; - _experImageView.hidden = YES; - _experImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _experImageView; + if (!_experImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _experImageView = [[NetImageView alloc] initWithConfig:config]; + _experImageView.userInteractionEnabled = YES; + _experImageView.hidden = YES; + _experImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _experImageView; } - (NetImageView *)charmImageView { - if (!_charmImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _charmImageView = [[NetImageView alloc] initWithConfig:config]; - _charmImageView.userInteractionEnabled = YES; - _charmImageView.hidden = YES; - _charmImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _charmImageView; + if (!_charmImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _charmImageView = [[NetImageView alloc] initWithConfig:config]; + _charmImageView.userInteractionEnabled = YES; + _charmImageView.hidden = YES; + _charmImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _charmImageView; } - (NetImageView *)nobleImageView { - if (!_nobleImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _nobleImageView = [[NetImageView alloc] initWithConfig:config]; - _nobleImageView.userInteractionEnabled = YES; - _nobleImageView.hidden = YES; - _nobleImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _nobleImageView; + if (!_nobleImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _nobleImageView = [[NetImageView alloc] initWithConfig:config]; + _nobleImageView.userInteractionEnabled = YES; + _nobleImageView.hidden = YES; + _nobleImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _nobleImageView; } - (UIView *)namePlateView { - if (!_namePlateView) { - _namePlateView = [[UIView alloc] init]; - _namePlateView.backgroundColor = [UIColor clearColor]; - _namePlateView.hidden = YES; - } - return _namePlateView; + if (!_namePlateView) { + _namePlateView = [[UIView alloc] init]; + _namePlateView.backgroundColor = [UIColor clearColor]; + _namePlateView.hidden = YES; + } + return _namePlateView; } - (NetImageView *)nameplateImageView { - if (!_nameplateImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _nameplateImageView = [[NetImageView alloc] initWithConfig:config]; - _nameplateImageView.userInteractionEnabled = YES; - _nameplateImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _nameplateImageView; + if (!_nameplateImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _nameplateImageView = [[NetImageView alloc] initWithConfig:config]; + _nameplateImageView.userInteractionEnabled = YES; + _nameplateImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _nameplateImageView; } - (UILabel *)nameplateLabel { - if (!_nameplateLabel) { - _nameplateLabel = [[UILabel alloc] init]; - _nameplateLabel.font = [UIFont systemFontOfSize:10]; - _nameplateLabel.textAlignment = NSTextAlignmentCenter; - _nameplateLabel.textColor = [UIColor whiteColor]; - } - return _nameplateLabel; + if (!_nameplateLabel) { + _nameplateLabel = [[UILabel alloc] init]; + _nameplateLabel.font = [UIFont systemFontOfSize:10]; + _nameplateLabel.textAlignment = NSTextAlignmentCenter; + _nameplateLabel.textColor = [UIColor whiteColor]; + } + return _nameplateLabel; } - (UIImageView *)newsUserImageView { - if (!_newsUserImageView) { - _newsUserImageView = [[UIImageView alloc] init]; - _newsUserImageView.userInteractionEnabled = YES; - _newsUserImageView.image = [UIImage imageNamed:@"common_new_user"]; - _newsUserImageView.hidden = YES; - } - return _newsUserImageView; + if (!_newsUserImageView) { + _newsUserImageView = [[UIImageView alloc] init]; + _newsUserImageView.userInteractionEnabled = YES; + _newsUserImageView.image = [UIImage imageNamed:@"common_new_user"]; + _newsUserImageView.hidden = YES; + } + return _newsUserImageView; } - (UIImageView *)officalImageView { - if (!_officalImageView) { - _officalImageView = [[UIImageView alloc] init]; - _officalImageView.userInteractionEnabled = YES; - _officalImageView.image = [UIImage imageNamed:@"common_offical"]; - _officalImageView.hidden = YES; - } - return _officalImageView; + if (!_officalImageView) { + _officalImageView = [[UIImageView alloc] init]; + _officalImageView.userInteractionEnabled = YES; + _officalImageView.image = [UIImage imageNamed:@"common_offical"]; + _officalImageView.hidden = YES; + } + return _officalImageView; } - (UIStackView *)tagStackView { - if (!_tagStackView) { - _tagStackView = [[UIStackView alloc] init]; - _tagStackView.axis = UILayoutConstraintAxisHorizontal; - _tagStackView.distribution = UIStackViewDistributionFill; - _tagStackView.alignment = UIStackViewAlignmentFill; - _tagStackView.spacing = 2; - } - return _tagStackView; + if (!_tagStackView) { + _tagStackView = [[UIStackView alloc] init]; + _tagStackView.axis = UILayoutConstraintAxisHorizontal; + _tagStackView.distribution = UIStackViewDistributionFill; + _tagStackView.alignment = UIStackViewAlignmentFill; + _tagStackView.spacing = 2; + } + return _tagStackView; } - (NetImageView *)firstTagImageView { - if (!_firstTagImageView) { - _firstTagImageView = [[NetImageView alloc] init]; - _firstTagImageView.hidden = YES; - } - return _firstTagImageView; + if (!_firstTagImageView) { + _firstTagImageView = [[NetImageView alloc] init]; + _firstTagImageView.hidden = YES; + } + return _firstTagImageView; } - (NetImageView *)secondTagImageView { - if (!_secondTagImageView) { - _secondTagImageView = [[NetImageView alloc] init]; - _secondTagImageView.hidden = YES; - } - return _secondTagImageView; + if (!_secondTagImageView) { + _secondTagImageView = [[NetImageView alloc] init]; + _secondTagImageView.hidden = YES; + } + return _secondTagImageView; } - (NetImageView *)thirdTagImageView { - if (!_thirdTagImageView) { - _thirdTagImageView = [[NetImageView alloc] init]; - _thirdTagImageView.hidden = YES; - } - return _thirdTagImageView; + if (!_thirdTagImageView) { + _thirdTagImageView = [[NetImageView alloc] init]; + _thirdTagImageView.hidden = YES; + } + return _thirdTagImageView; } - (UIButton *)onlineButton { - if (!_onlineButton) { - _onlineButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_onlineButton setTitle:YMLocalizedString(@"XPMonentsUserInfoView0") forState:UIControlStateNormal]; - [_onlineButton setImage:[UIImage imageNamed:@"home_search_user_online"] forState:UIControlStateNormal]; - [_onlineButton setTitleColor:[DJDKMIMOMColor appEmphasizeColor] forState:UIControlStateNormal]; - _onlineButton.backgroundColor = [UIColor clearColor]; - _onlineButton.titleLabel.font = [UIFont systemFontOfSize:10]; - _onlineButton.layer.masksToBounds = YES; - _onlineButton.layer.cornerRadius = 18/2; - _onlineButton.layer.borderColor = [DJDKMIMOMColor appEmphasizeColor].CGColor; - _onlineButton.layer.borderWidth = 1; - [_onlineButton addTarget:self action:@selector(onlineButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _onlineButton; + if (!_onlineButton) { + _onlineButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_onlineButton setTitle:YMLocalizedString(@"XPMonentsUserInfoView2") forState:UIControlStateNormal]; + [_onlineButton setImage:[UIImage imageNamed:@"monents_on_line_note"] forState:UIControlStateNormal]; + [_onlineButton setTitleColor:[DJDKMIMOMColor appMainColor] forState:UIControlStateNormal]; + _onlineButton.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 3); + _onlineButton.backgroundColor = [UIColor clearColor]; + _onlineButton.titleLabel.font = [UIFont systemFontOfSize:10]; + _onlineButton.layer.masksToBounds = YES; + _onlineButton.layer.cornerRadius = 18/2; + [_onlineButton setBackgroundImage:[UIImage imageNamed:@"monents_on_line_bg"] forState:UIControlStateNormal]; + [_onlineButton addTarget:self action:@selector(onlineButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _onlineButton; } + + @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsAttentionViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsAttentionViewController.m index a5673665..0636d099 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsAttentionViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsAttentionViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsAttentionViewController.m -// YUMI +// XPMonentsAttentionViewController.m +// xplan-ios // -// Created by YUMI on 2022/5/18. +// Created by 冯硕 on 2022/5/18. // #import "XPMonentsAttentionViewController.h" @@ -10,12 +10,9 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" + #import "XPMonentsLayoutConfig.h" #import "TTPopup.h" -#import "NSArray+Safe.h" -#import "ClientConfig.h" ///Model #import "MonentsListInfoModel.h" ///P @@ -25,8 +22,7 @@ #import "XPMonentsTableViewCell.h" #import "XPMonentsEmptyTableViewCell.h" #import "XPMonentsDetailViewController.h" -#import "XPMomentsSimpleDetailViewController.h" - +UIKIT_EXTERN NSString *kRequestRicket; @interface XPMonentsAttentionViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; @@ -41,242 +37,273 @@ @end @implementation XPMonentsAttentionViewController - +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (__kindof id)createPresenter { - return [[XPMonentsAttentionPresenter alloc] init]; + return [[XPMonentsAttentionPresenter alloc] init]; } - (void)viewDidLoad { - [super viewDidLoad]; - [self initHeaderAndFooterRrfresh]; - [self initSubViews]; - [self initSubViewConstraints]; + [super viewDidLoad]; + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.tableView]; + [self.view addSubview:self.tableView]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestRicketSuccess:) name:kRequestRicket object:nil]; +} +-(void)requestRicketSuccess:(NSNotification *)not{ + if([not.object isKindOfClass:[NSDictionary class]])return; + BOOL is = [not.object boolValue]; + if(is == YES){ + [self headerRefresh]; + } } + - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; } #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { - MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; - header.stateLabel.font = [UIFont systemFontOfSize:10.0]; - header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; - header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; - self.tableView.mj_header = header; - - MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; - footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; - self.tableView.mj_footer = footer; - - [self headerRefresh]; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; + + [self headerRefresh]; } #pragma mark - 刷新的fangfa - (void)headerRefresh { - self.page = 1; - [self.presenter getMonentsAttentionListPageSize:20 dynamicId:@"" state:0]; + if([AccountInfoStorage instance].isRequestRicket == YES){ + return; + } + self.page = 1; + [self.presenter getMonentsAttentionListPageSize:20 dynamicId:@"" state:0]; } - (void)footerRefresh { - if (self.hasNoMoreData) { - [self showErrorToast:YMLocalizedString(@"XPMonentsAttentionViewController0")]; - [self.tableView.mj_footer endRefreshing]; - return; - } - self.page++; - [self.presenter getMonentsAttentionListPageSize:20 dynamicId:self.listInfo.nextDynamicId state:1]; + if([AccountInfoStorage instance].isRequestRicket == YES)return; + if (self.hasNoMoreData) { + [self showErrorToast:YMLocalizedString(@"XPMonentsAttentionViewController0")]; + [self.tableView.mj_footer endRefreshing]; + return; + } + self.page++; + [self.presenter getMonentsAttentionListPageSize:20 dynamicId:self.listInfo.nextDynamicId state:1]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.datasource.count > 0 ? self.datasource.count : 1; + return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; - [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; - return monentInfo.rowHeight; - } - return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; + if (self.datasource.count > 0) { + MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; + [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; + if(monentInfo.squareTop && monentInfo.content.length == 0){ + return monentInfo.rowHeight + 20 ; + }else{ + return monentInfo.rowHeight; + } + + } + return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - cell.delegate = self; - cell.monentsInfo = monentsInfo; - return cell; - } - XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - return cell; + if (self.datasource.count > 0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.delegate = self; + cell.monentsInfo = monentsInfo; + return cell; + } + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (self.datasource.count > 0) { - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - if ([ClientConfig shareConfig].canOpen) { - XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - }else{ - XPMomentsSimpleDetailViewController * detailVC = [[XPMomentsSimpleDetailViewController alloc] init]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - } - } + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (self.datasource.count > 0) { + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + detailVC.monentsInfo = monentsInfo; + detailVC.delegate = self; + [self.navigationController pushViewController:detailVC animated:YES]; + } } #pragma mark - XPMonentsDetailViewControllerDelegate -- (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == dynamicId.integerValue) { - deleteInfo = obj; - } - }]; +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(MonentsInfoModel *)monentsInfo{ + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; +} - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } +- (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - XPMonentsTableViewCellDelegate - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { - [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { - [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsTopicLatestViewController1") confirmHandler:^{ - [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; - } cancelHandler:^{ - - }]; + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsAttentionViewController1") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ + + }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { - __block MonentsInfoModel * monentsInfos; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { - monentsInfos = obj; - *stop = YES; - } - }]; - if (monentsInfos) { - NSInteger row = [self.datasource indexOfObject:monentsInfo]; - [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; - } + __block MonentsInfoModel * monentsInfos; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { + monentsInfos = obj; + *stop = YES; + } + }]; + if (monentsInfos) { + NSInteger row = [self.datasource indexOfObject:monentsInfo]; + [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; + } } #pragma mark -JXCategoryListContainerViewDelegate - (UIView *)listView { - return self.view; + return self.view; } #pragma mark - XPMonentsRecommendProtocol - (void)getMonentsAttentionListSuccess:(MonentsListInfoModel *)listInfo state:(int)state { - self.listInfo = listInfo; - if (state == 0) { - [self.datasource removeAllObjects]; - } - if (listInfo.dynamicList.count > 0) { - [self.datasource addObjectsFromArray:listInfo.dynamicList]; - } - - if (state == 0) { - self.hasNoMoreData = NO; - [self.tableView.mj_header endRefreshing]; - } else { - if (listInfo.dynamicList.count > 0) { - self.hasNoMoreData = NO; - } else { - self.hasNoMoreData = YES; - } - [self.tableView.mj_footer endRefreshing]; - } - [self.tableView reloadData]; + self.listInfo = listInfo; + if (state == 0) { + [self.datasource removeAllObjects]; + } + if (listInfo.dynamicList.count > 0) { + [self.datasource addObjectsFromArray:listInfo.dynamicList]; + } + + if (state == 0) { + self.hasNoMoreData = NO; + [self.tableView.mj_header endRefreshing]; + } else { + if (listInfo.dynamicList.count > 0) { + self.hasNoMoreData = NO; + } else { + self.hasNoMoreData = YES; + } + [self.tableView.mj_footer endRefreshing]; + } + [self.tableView reloadData]; } - (void)getMonentsAttentionListFail:(NSString *)msg state:(int)state { - if (state == 0) { - [self.tableView.mj_header endRefreshing]; - } else { - [self.tableView.mj_footer endRefreshing]; - } + if (state == 0) { + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj.dynamicId isEqualToString:dynamicId]) { - if (status) { - obj.isLike += 1; - } else { - obj.isLike -= 1; - } - *stop = YES; - } - }]; - [self.tableView reloadData]; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + if (status) { + obj.isLike += 1; + } else { + obj.isLike -= 1; + } + *stop = YES; + } + }]; + [self.tableView reloadData]; +} +-(void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } - - (void)deleteMonentsSuccess:(NSString *)monentsInfo { - [self showSuccessToast:YMLocalizedString(@"XPMonentsAttentionViewController2")]; - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.integerValue) { - deleteInfo = obj; - } - }]; - - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + [self showSuccessToast:YMLocalizedString(@"XPMonentsAttentionViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - Getters And Setters - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.tableFooterView = [UIView new]; - _tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0); - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + } + return _tableView; } - (NSMutableArray *)datasource { - if (!_datasource) { - _datasource = [NSMutableArray array]; - } - return _datasource; + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; } @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsDetailViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsDetailViewController.m index 0ad88897..fb43ec92 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsDetailViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsDetailViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsDetailViewController.m -// YUMI +// XPMonentsDetailViewController.m +// xplan-ios // -// Created by YUMI on 2022/6/22. +// Created by 冯硕 on 2022/6/22. // #import "XPMonentsDetailViewController.h" @@ -11,12 +11,9 @@ #import ///Tool #import "XPMonentsLayoutConfig.h" -#import "DJDKMIMOMColor.h" #import "QEmotionHelper.h" #import "QKeyboardManager.h" #import "TTPopup.h" -#import "NSArray+Safe.h" -#import "ClientConfig.h" ///Model #import "MonentsInfoModel.h" #import "MonentsCommentModel.h" @@ -29,7 +26,6 @@ #import "QKeyboardManager.h" #import "QEmotionBoardView.h" #import "XPMineUserInfoViewController.h" -#import "XPMineSimpleUserInfoViewController.h" ///P #import "XPMonentDetailPresenter.h" #import "XPMonentsDetailProtocol.h" @@ -50,286 +46,340 @@ @end @implementation XPMonentsDetailViewController - +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} - (__kindof id)createPresenter { - return [[XPMonentDetailPresenter alloc] init]; + return [[XPMonentDetailPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; - [self initHeaderAndFooterRrfresh]; - [self initSubViews]; - [self initSubViewConstraints]; -} + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(refreshDynamicData:) name:@"kRefreshDynamicData" object:nil]; +} +-(void)refreshDynamicData:(NSNotification *)not{ + NSDictionary *refreshData = not.object; + int type = [refreshData[@"type"] intValue]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + switch (type) { + case 0: + { + + BOOL status = [refreshData[@"status"] boolValue]; + NSInteger count = self.monentsInfo.likeCount.integerValue; + NSString *dynamicId = refreshData[@"dynamicId"]; + if([self.monentsInfo.dynamicId isEqualToString:dynamicId]){ + self.monentsInfo.isLike = status; + if (status) { + count += 1; + } else { + count -= 1; + } + self.monentsInfo.likeCount = [NSString stringWithFormat:@"%ld", count]; + [self.tableView reloadData]; + } + break; + } + case 1: + { + + + break; + } + case 2: + { + + break; + } + default: + { + NSString *dynamicId = refreshData[@"dynamicId"]; + if([self.monentsInfo.dynamicId isEqualToString:dynamicId]){ + self.monentsInfo.commentCount = [NSString stringWithFormat:@"%ld",self.monentsInfo.commentCount.integerValue + 1]; + + + [self.tableView reloadData]; + } + + break; + } + } +} #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { - MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; - header.stateLabel.font = [UIFont systemFontOfSize:10.0]; - header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; - header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; - self.tableView.mj_header = header; - - MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; - footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; - self.tableView.mj_footer = footer; - - [self headerRefresh]; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; + + [self headerRefresh]; } - (void)headerRefresh { - [self.presenter getMonentsDetail:self.monentsInfo.dynamicId]; - [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; + [self.presenter getMonentsDetail:self.monentsInfo.dynamicId]; + [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; } - (void)footerRefresh { - NSString *timestamp = @""; - if (self.datasource.count > 0) { - MonentsCommentModel * commentInfo = [self.datasource lastObject]; - timestamp = commentInfo.publishTime; - } - [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:timestamp status:1]; + NSString *timestamp = @""; + if (self.datasource.count > 0) { + MonentsCommentModel * commentInfo = [self.datasource lastObject]; + timestamp = commentInfo.publishTime; + } + [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:timestamp status:1]; } #pragma mark - Private Method - (void)initInputView { - // 初始化输入工具条,frame可以先这样临时设置,下面的addBottomInputBarView方法会重置输入条frame - // 如果你想要自定义输入条View,请参考TextFieldViewController代码 - _inputBarView = [[QInputBarView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,UIInputBarViewMinHeight)]; - QInputBarViewConfiguration *inputBarViewConfiguration = [QInputBarViewConfiguration defaultInputBarViewConfiguration]; - inputBarViewConfiguration.voiceButtonHidden = YES;//隐藏语音按钮 - inputBarViewConfiguration.extendButtonHidden = YES;//隐藏拓展按钮 - [_inputBarView setupWithConfiguration:inputBarViewConfiguration]; - _inputBarView.delegate = self; + // 初始化输入工具条,frame可以先这样临时设置,下面的addBottomInputBarView方法会重置输入条frame + // 如果你想要自定义输入条View,请参考TextFieldViewController代码 + _inputBarView = [[QInputBarView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,UIInputBarViewMinHeight)]; + QInputBarViewConfiguration *inputBarViewConfiguration = [QInputBarViewConfiguration defaultInputBarViewConfiguration]; + inputBarViewConfiguration.voiceButtonHidden = YES;//隐藏语音按钮 + inputBarViewConfiguration.extendButtonHidden = YES;//隐藏拓展按钮 + [_inputBarView setupWithConfiguration:inputBarViewConfiguration]; + _inputBarView.delegate = self; - //keyboard管理类,用来管理键盘,各大面板的切换 - _keyboardManager = [[QKeyboardManager alloc] initWithViewController:self]; - _keyboardManager.dataSource = self; - //因为addBottomInputBarView方法会立刻触发delegate,所以这里需要先设置delegate - _keyboardManager.delegate = self; - [_keyboardManager addBottomInputBarView:_inputBarView belowViewController:NO]; + //keyboard管理类,用来管理键盘,各大面板的切换 + _keyboardManager = [[QKeyboardManager alloc] initWithViewController:self]; + _keyboardManager.dataSource = self; + //因为addBottomInputBarView方法会立刻触发delegate,所以这里需要先设置delegate + _keyboardManager.delegate = self; + [_keyboardManager addBottomInputBarView:_inputBarView belowViewController:NO]; - //把输入框(如果有的话)绑定给管理类 - [_keyboardManager bindTextView:_inputBarView.inputTextView]; + //把输入框(如果有的话)绑定给管理类 + [_keyboardManager bindTextView:_inputBarView.inputTextView]; } - (void)sendTextMessage:(NSString *)inputText { - if (inputText.length > 0) { - [_keyboardManager hideAllBoardView]; - if (self.commentId && self.commentId.length > 0) { - [self.presenter replayCommon:self.commentId dynamicId:self.monentsInfo.dynamicId content:inputText]; - } else { - [self.presenter commontMonents:self.monentsInfo.dynamicId content:inputText]; - } - self.inputBarView.inputTextView.text = nil; - } else { - [self showErrorToast:YMLocalizedString(@"XPMonentsDetailViewController0")]; - } + if (inputText.length > 0) { + [_keyboardManager hideAllBoardView]; + if (self.commentId && self.commentId.length > 0) { + [self.presenter replayCommon:self.commentId dynamicId:self.monentsInfo.dynamicId content:inputText]; + } else { + [self.presenter commontMonents:self.monentsInfo.dynamicId content:inputText]; + } + self.inputBarView.inputTextView.text = nil; + } else { + [self showErrorToast:YMLocalizedString(@"XPMonentsDetailViewController0")]; + } } - (void)initSubViews { - self.title = YMLocalizedString(@"XPMonentsDetailViewController1"); - [self.view addSubview:self.tableView]; - [self.sectionView addSubview:self.commentLabel]; - [self initInputView]; + self.title = YMLocalizedString(@"XPMonentsDetailViewController1"); + [self.view addSubview:self.tableView]; + [self.sectionView addSubview:self.commentLabel]; + [self initInputView]; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.mas_equalTo(self.view); - make.bottom.mas_equalTo(self.inputBarView.mas_top); - }]; - - [self.commentLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.sectionView).offset(15); - make.centerY.mas_equalTo(self.sectionView); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.top.mas_equalTo(self.view); + make.bottom.mas_equalTo(self.inputBarView.mas_top); + }]; + + [self.commentLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.mas_equalTo(self.sectionView).offset(15); + make.centerY.mas_equalTo(self.sectionView); + }]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 2; + return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == 0) { - return 1; - } - return self.datasource.count > 0 ? self.datasource.count : 1; + if (section == 0) { + return 1; + } + return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == 0) { - [XPMonentsLayoutConfig layoutMonentsModel:self.monentsInfo]; - return self.monentsInfo.rowHeight; - } else if(indexPath.section == 1) { - if (self.datasource.count > 0) { - MonentsCommentModel * commentInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - return [XPMonentsLayoutConfig commentCommentRowHeight:commentInfo]; - } else { - return 400; - } - } - return 0; + if (indexPath.section == 0) { + [XPMonentsLayoutConfig layoutMonentsModel:self.monentsInfo]; + + if(self.monentsInfo.squareTop && self.monentsInfo.content.length == 0){ + return self.monentsInfo.rowHeight + 20 ; + }else{ + return self.monentsInfo.rowHeight; + } + } else if(indexPath.section == 1) { + if (self.datasource.count > 0) { + MonentsCommentModel * commentInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + return [XPMonentsLayoutConfig commentCommentRowHeight:commentInfo]; + } else { + return 400; + } + } + return 0; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - if (section == 1) { - return 44; - } - return 0.0;; + if (section == 1) { + return 44; + } + return 0.0;; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - self.commentLabel.text = [NSString stringWithFormat:@"%@(%@)",YMLocalizedString(@"XPMonentsDetailViewController2"),self.monentsInfo.commentCount]; - return self.sectionView; + self.commentLabel.text = [NSString stringWithFormat:YMLocalizedString(@"XPMonentsDetailViewController2"), self.monentsInfo.commentCount]; + return self.sectionView; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - return 0.0f; + return 0.0f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { - return [UIView new]; + return [UIView new]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section ==0) { - XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - cell.delegate = self; - cell.monentsInfo = self.monentsInfo; - return cell; - } else { - if (self.datasource.count > 0) { - XPMonentsCommentTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsCommentTableViewCell class])]; - cell.commentInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - cell.delegate = self; - return cell; - } else { - XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - return cell; - } - } + if (indexPath.section ==0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + cell.delegate = self; + cell.monentsInfo = self.monentsInfo; + return cell; + } else { + if (self.datasource.count > 0) { + XPMonentsCommentTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsCommentTableViewCell class])]; + cell.commentInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.delegate = self; + return cell; + } else { + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; + } + } } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (indexPath.section == 1) { - if (self.datasource.count > 0) { - MonentsCommentModel* monent = [self.datasource safeObjectAtIndex1:indexPath.row]; - self.commentId = monent.commentId; - self.inputBarView.inputTextView.placeholder = [NSString stringWithFormat:@"%@: %@", YMLocalizedString(@"XPMonentsDetailViewController3"),monent.nick]; - [self.inputBarView textViewBecomeFirstResponder]; - } - } + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (indexPath.section == 1) { + if (self.datasource.count > 0) { + MonentsCommentModel* monent = [self.datasource safeObjectAtIndex1:indexPath.row]; + self.commentId = monent.commentId; + self.inputBarView.inputTextView.placeholder = [NSString stringWithFormat:YMLocalizedString(@"XPMonentsDetailViewController3"), monent.nick]; + [self.inputBarView textViewBecomeFirstResponder]; + } + } } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { - [_keyboardManager hideAllBoardView]; + [_keyboardManager hideAllBoardView]; } #pragma mark - XPMonentsCommentTableViewCellDelegate +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(MonentsInfoModel *)monentsInfo{ + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; +} - (void)xPMonentsCommentTableViewCell:(XPMonentsCommentTableViewCell *)view didClickMoreReply:(MonentsCommentModel *)commentInfo { - [self.presenter getMonentsCommentReplyList:self.monentsInfo.dynamicId commentId:commentInfo.commentId timestamp:commentInfo.replyInfo.nextTimestamp]; + [self.presenter getMonentsCommentReplyList:self.monentsInfo.dynamicId commentId:commentInfo.commentId timestamp:commentInfo.replyInfo.nextTimestamp]; } - (void)xPMonentsCommentTableViewCell:(XPMonentsCommentTableViewCell *)view didClickCommon:(MonentsReplyModel *)commentInfo { - if (commentInfo) { - self.commentId = commentInfo.replyId; - self.inputBarView.inputTextView.placeholder = [NSString stringWithFormat:@"%@: %@",YMLocalizedString(@"XPMonentsDetailViewController3"), commentInfo.nick]; - [self.inputBarView textViewBecomeFirstResponder]; - } + if (commentInfo) { + self.commentId = commentInfo.replyId; + self.inputBarView.inputTextView.placeholder = [NSString stringWithFormat:YMLocalizedString(@"XPMonentsDetailViewController4"), commentInfo.nick]; + [self.inputBarView textViewBecomeFirstResponder]; + } } - (void)xPMonentsCommentTableViewCell:(XPMonentsCommentTableViewCell *)view didClickAvatar:(NSString *)commentInfo { - if ([ClientConfig shareConfig].canOpen) { - XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init]; - userInfoVC.uid = commentInfo.integerValue; - [self.navigationController pushViewController:userInfoVC animated:YES]; - }else{ - XPMineSimpleUserInfoViewController * userInfoVC = [[XPMineSimpleUserInfoViewController alloc] init]; - userInfoVC.uid = commentInfo.integerValue; - [self.navigationController pushViewController:userInfoVC animated:YES]; - } + XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init]; + userInfoVC.uid = commentInfo.integerValue; + [self.navigationController pushViewController:userInfoVC animated:YES]; } #pragma mark - XPMonentsTableViewCellDelegate - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { - [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { - [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsDetailViewController5") confirmHandler:^{ - [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; - } cancelHandler:^{ + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsDetailViewController5") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ - }]; + }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicCommon:(MonentsInfoModel *)monentsInfo { - if (monentsInfo) { - self.commentId = nil; - self.inputBarView.inputTextView.placeholder = YMLocalizedString(@"XPMonentsDetailViewController6"); - [self.inputBarView textViewBecomeFirstResponder]; - } + if (monentsInfo) { + self.commentId = nil; + self.inputBarView.inputTextView.placeholder = YMLocalizedString(@"XPMonentsDetailViewController6"); + [self.inputBarView textViewBecomeFirstResponder]; + } } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { - self.monentsInfo = monentsInfo; - [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; + self.monentsInfo = monentsInfo; + [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; } #pragma mark - InputBoardDataSource //@return 点加号按钮弹出的拓展面板View,且无需设置frame - (UIView *)keyboardManagerExtendBoardView:(QKeyboardManager *)keyboardManager { - UIView *boardView = [UIView new]; - boardView.backgroundColor = UIColor.blueColor; - return boardView; + UIView *boardView = [UIView new]; + boardView.backgroundColor = UIColor.blueColor; + return boardView; } //@return 点表情按钮弹出的表情面板View,且无需设置frame - (UIView *)keyboardManagerEmotionBoardView:(QKeyboardManager *)keyboardManager { - QEmotionBoardView *emotionView = [[QEmotionBoardView alloc] init]; - QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper]; - emotionView.emotions = faceManager.emotionArray; - emotionView.delegate = self; - if (@available(iOS 11.0, *)) { - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - emotionView.backgroundColor = [UIColor colorNamed:@"q_input_extend_bg" inBundle:bundle compatibleWithTraitCollection:nil]; - } else { - emotionView.backgroundColor = [UIColor colorWithRed:(246)/255.0f green:(246)/255.0f blue:(246)/255.0f alpha:1]; - } - return emotionView; + QEmotionBoardView *emotionView = [[QEmotionBoardView alloc] init]; + QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper]; + emotionView.emotions = faceManager.emotionArray; + emotionView.delegate = self; + if (@available(iOS 11.0, *)) { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + emotionView.backgroundColor = [UIColor colorNamed:@"q_input_extend_bg" inBundle:bundle compatibleWithTraitCollection:nil]; + } else { + emotionView.backgroundColor = [UIColor colorWithRed:(246)/255.0f green:(246)/255.0f blue:(246)/255.0f alpha:1]; + } + return emotionView; } //@return 点表情按钮弹出的表情面板View的高度 - (CGFloat)keyboardManagerEmotionBoardHeight:(QKeyboardManager *)keyboardManager { - return 294; + return 294; } //@return 点加号按钮弹出的拓展面板View的高度 - (CGFloat)keyboardManagerExtendBoardHeight:(QKeyboardManager *)keyboardManager { - return 174; + return 174; } - (QInputBarViewConfiguration *)inputBarViewConfiguration { - //输入条配置,子类可以重写 - QInputBarViewConfiguration *inputBarViewConfiguration = [QInputBarViewConfiguration defaultInputBarViewConfiguration]; - inputBarViewConfiguration.voiceButtonHidden = YES;//隐藏语音按钮 - inputBarViewConfiguration.extendButtonHidden = YES;//隐藏拓展按钮 - return inputBarViewConfiguration; + //输入条配置,子类可以重写 + QInputBarViewConfiguration *inputBarViewConfiguration = [QInputBarViewConfiguration defaultInputBarViewConfiguration]; + inputBarViewConfiguration.voiceButtonHidden = YES;//隐藏语音按钮 + inputBarViewConfiguration.extendButtonHidden = YES;//隐藏拓展按钮 + return inputBarViewConfiguration; } //点击表情按钮,切换到表情面板 - (void)inputBarView:(QInputBarView *)inputBarView onEmotionButtonClick:(UIButton *)emotionSwitchButton { - if (emotionSwitchButton.isSelected) { - [_keyboardManager switchToEmotionBoardKeyboard]; - } else { - self.commentId = nil; - _inputBarView.inputTextView.placeholder = YMLocalizedString(@"XPMonentsDetailViewController7"); - [_inputBarView textViewBecomeFirstResponder]; - } + if (emotionSwitchButton.isSelected) { + [_keyboardManager switchToEmotionBoardKeyboard]; + } else { + self.commentId = nil; + _inputBarView.inputTextView.placeholder = YMLocalizedString(@"XPMonentsDetailViewController7"); + [_inputBarView textViewBecomeFirstResponder]; + } } #pragma mark - QEmotionBoardViewDelegate @@ -339,21 +389,21 @@ * @param emotion 被选中的表情对应的`QMUIEmotion`对象 */ - (void)emotionView:(QEmotionBoardView *)emotionView didSelectEmotion:(QEmotion *)emotion atIndex:(NSInteger)index { - //把😊插入到输入栏 - [_inputBarView insertEmotion:emotion.displayName]; + //把😊插入到输入栏 + [_inputBarView insertEmotion:emotion.displayName]; } // 删除按钮的点击事件回调 - (void)emotionViewDidSelectDeleteButton:(QEmotionBoardView *)emotionView { - if (![_inputBarView deleteEmotion]){ - //根据当前的光标,这次点击删除按钮并没有删除表情,那么就删除文字 - [_inputBarView.inputTextView deleteBackward]; - } + if (![_inputBarView deleteEmotion]){ + //根据当前的光标,这次点击删除按钮并没有删除表情,那么就删除文字 + [_inputBarView.inputTextView deleteBackward]; + } } // 发送按钮的点击事件回调 - (void)emotionViewDidSelectSendButton:(QEmotionBoardView *)emotionView { - [self sendTextMessage:[_inputBarView textViewInputNormalText]]; + [self sendTextMessage:[_inputBarView textViewInputNormalText]]; } @@ -363,124 +413,130 @@ * @param inputNormalText :"害~你好啊[微笑]" */ - (void)inputBarView:(QInputBarView *)inputBarView onKeyboardSendClick:(NSString *)inputNormalText { - [self sendTextMessage:inputNormalText]; + [self sendTextMessage:inputNormalText]; } #pragma mark - XPMonentsDetailProtocol - (void)getMonentsDetailSuccess:(MonentsInfoModel *)commentInfo { - self.monentsInfo = commentInfo; - [self.tableView reloadData]; + self.monentsInfo = commentInfo; + [self.tableView reloadData]; } - (void)getMonentsCommentListSuccess:(MonentsCommentListModel *)commentInfo state:(int)state{ - if (state == 0) { - [self.datasource removeAllObjects]; - [self.tableView.mj_header endRefreshing]; - } else { - [self.tableView.mj_footer endRefreshing]; - } - - if (commentInfo.commentList.count > 0) { - [self.datasource addObjectsFromArray:commentInfo.commentList]; - } - [self.tableView reloadData]; + if (state == 0) { + [self.datasource removeAllObjects]; + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } + + if (commentInfo.commentList.count > 0) { + [self.datasource addObjectsFromArray:commentInfo.commentList]; + } + [self.tableView reloadData]; } - (void)getMonentsCommentReplyListSuccess:(MonentsCommentReplyModel *)replyInfo commentId:(nonnull NSString *)commentId { - if (commentId) { - __block MonentsCommentModel * commentInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsCommentModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj.commentId isEqualToString:commentId]) { - commentInfo = obj; - *stop = YES; - } - }]; - - if (commentInfo) { - NSMutableArray * replyList= commentInfo.replyInfo.replyList.mutableCopy; - [replyList addObjectsFromArray:replyInfo.replyList]; - commentInfo.replyInfo.replyList = replyList.copy; - commentInfo.replyInfo.leftCount = replyInfo.leftCount; - commentInfo.replyInfo.nextTimestamp = replyInfo.nextTimestamp; - commentInfo.isReloadHeight = YES; - } - [self.tableView reloadData]; - } + if (commentId) { + __block MonentsCommentModel * commentInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsCommentModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.commentId isEqualToString:commentId]) { + commentInfo = obj; + *stop = YES; + } + }]; + + if (commentInfo) { + NSMutableArray * replyList= commentInfo.replyInfo.replyList.mutableCopy; + [replyList addObjectsFromArray:replyInfo.replyList]; + commentInfo.replyInfo.replyList = replyList.copy; + commentInfo.replyInfo.leftCount = replyInfo.leftCount; + commentInfo.replyInfo.nextTimestamp = replyInfo.nextTimestamp; + commentInfo.isReloadHeight = YES; + } + [self.tableView reloadData]; + } } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { - if ([self.monentsInfo.dynamicId isEqualToString:dynamicId]) { - NSInteger count = self.monentsInfo.likeCount.integerValue; - self.monentsInfo.isLike = status; - if (status) { - count += 1; - } else { - count -= 1; - } - self.monentsInfo.likeCount = [NSString stringWithFormat:@"%ld", count]; - [self.tableView reloadData]; - } + if ([self.monentsInfo.dynamicId isEqualToString:dynamicId]) { + + + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":dynamicId,@"type":@"0",@"status":@(status)}]; + } } - (void)replyMonentsSuccess { - [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; + [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":self.monentsInfo.dynamicId,@"type":@"3"}]; } - (void)commonMonentsSuccess { - [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; + [self.presenter getMonentsCommentList:self.monentsInfo.dynamicId timestamp:@"" status:0]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":self.monentsInfo.dynamicId,@"type":@"3"}]; +} +-(void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":monentsInfo,@"type":@"2"}]; + [self.navigationController popViewControllerAnimated:YES]; + } - - (void)deleteMonentsSuccess:(NSString *)monentsInfo { - [self showSuccessToast:YMLocalizedString(@"XPMonentsDetailViewController8")]; - [self.navigationController popViewControllerAnimated:YES]; - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsDetailViewController:deleteMonents:)]) { - [self.delegate xPMonentsDetailViewController:self deleteMonents:self.monentsInfo.dynamicId]; - } + [self showSuccessToast:YMLocalizedString(@"XPMonentsDetailViewController8")]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":monentsInfo,@"type":@"1"}]; + [self.navigationController popViewControllerAnimated:YES]; + } #pragma mark - Getters And Setters - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.tableFooterView = [UIView new]; - _tableView.tableFooterView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - [_tableView registerClass:[XPMonentsCommentTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsCommentTableViewCell class])]; - [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + [_tableView registerClass:[XPMonentsCommentTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsCommentTableViewCell class])]; + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + } + return _tableView; } - (UIView *)sectionView { - if (!_sectionView) { - _sectionView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 44)]; - _sectionView.backgroundColor = [UIColor clearColor]; - } - return _sectionView; + if (!_sectionView) { + _sectionView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 44)]; + _sectionView.backgroundColor = [UIColor clearColor]; + } + return _sectionView; } - (UILabel *)commentLabel { - if (!_commentLabel) { - _commentLabel = [[UILabel alloc] init]; - _commentLabel.font = [UIFont systemFontOfSize:14]; - _commentLabel.textColor = [DJDKMIMOMColor mainTextColor]; - } - return _commentLabel; + if (!_commentLabel) { + _commentLabel = [[UILabel alloc] init]; + _commentLabel.font = [UIFont systemFontOfSize:14]; + _commentLabel.textColor = [DJDKMIMOMColor mainTextColor]; + } + return _commentLabel; } - (NSMutableArray *)datasource { - if (!_datasource) { - _datasource = [NSMutableArray array]; - } - return _datasource; + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; } @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsLatestViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsLatestViewController.m index 558fd258..ebbd8234 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsLatestViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsLatestViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsLatestViewController.m -// YUMI +// XPMonentsLatestViewController.m +// xplan-ios // -// Created by YUMI on 2022/5/18. +// Created by 冯硕 on 2022/5/18. // #import "XPMonentsLatestViewController.h" @@ -10,12 +10,8 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" #import "XPMonentsLayoutConfig.h" #import "TTPopup.h" -#import "NSArray+Safe.h" -#import "ClientConfig.h" ///Model #import "MonentsListInfoModel.h" ///P @@ -25,8 +21,7 @@ #import "XPMonentsTableViewCell.h" #import "XPMonentsEmptyTableViewCell.h" #import "XPMonentsDetailViewController.h" -#import "XPMomentsSimpleDetailViewController.h" - +UIKIT_EXTERN NSString *kRequestRicket; @interface XPMonentsLatestViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; @@ -42,248 +37,273 @@ @implementation XPMonentsLatestViewController -- (void)dealloc { - NSLog(@"你阿宁"); +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; } - - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (__kindof id)createPresenter { - return [[XPMonentsLatestPresenter alloc] init]; + return [[XPMonentsLatestPresenter alloc] init]; } - (void)viewDidLoad { - [super viewDidLoad]; - [self initHeaderAndFooterRrfresh]; - [self initSubViews]; - [self initSubViewConstraints]; + [super viewDidLoad]; + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.tableView]; + [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestRicketSuccess:) name:kRequestRicket object:nil]; +} +-(void)requestRicketSuccess:(NSNotification *)not{ + if([not.object isKindOfClass:[NSDictionary class]])return; + BOOL is = [not.object boolValue]; + if(is == YES){ + [self headerRefresh]; + } } #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { - MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; - header.stateLabel.font = [UIFont systemFontOfSize:10.0]; - header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; - header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; - self.tableView.mj_header = header; - - MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; - footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; - self.tableView.mj_footer = footer; - - [self headerRefresh]; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; + + [self headerRefresh]; } #pragma mark - 刷新的fangfa - (void)headerRefresh { - self.page = 1; - [self.presenter getMonentsLatestListPageSize:20 dynamicId:@"" state:0]; + if([AccountInfoStorage instance].isRequestRicket == YES){ + return; + } + self.page = 1; + [self.presenter getMonentsLatestListPageSize:20 dynamicId:@"" state:0]; } - (void)footerRefresh { - if (self.hasNoMoreData) { - [self showErrorToast:YMLocalizedString(@"XPMonentsLatestViewController0")]; - [self.tableView.mj_footer endRefreshing]; - return; - } - self.page++; - [self.presenter getMonentsLatestListPageSize:20 dynamicId:self.listInfo.nextDynamicId state:1]; + if([AccountInfoStorage instance].isRequestRicket == YES)return; + if (self.hasNoMoreData) { + [self showErrorToast:YMLocalizedString(@"XPMonentsLatestViewController0")]; + [self.tableView.mj_footer endRefreshing]; + return; + } + self.page++; + [self.presenter getMonentsLatestListPageSize:20 dynamicId:self.listInfo.nextDynamicId state:1]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.datasource.count > 0 ? self.datasource.count : 1; + return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; - [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; - return monentInfo.rowHeight; - } - return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; + if (self.datasource.count > 0) { + MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; + [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; + if(monentInfo.squareTop && monentInfo.content.length == 0){ + return monentInfo.rowHeight + 20 ; + }else{ + return monentInfo.rowHeight; + } + + } + return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - cell.monentsInfo = monentsInfo; - cell.delegate = self; - return cell; - } - XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - return cell; + if (self.datasource.count > 0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.monentsInfo = monentsInfo; + cell.delegate = self; + return cell; + } + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (self.datasource.count > 0) { - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - - if ([ClientConfig shareConfig].canOpen) { - XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - }else{ - XPMomentsSimpleDetailViewController * detailVC = [[XPMomentsSimpleDetailViewController alloc] init]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - } - } + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (self.datasource.count > 0) { + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + detailVC.monentsInfo = monentsInfo; + detailVC.delegate = self; + [self.navigationController pushViewController:detailVC animated:YES]; + } } #pragma mark - XPMonentsDetailViewControllerDelegate - (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == dynamicId.integerValue) { - deleteInfo = obj; - } - }]; - - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - XPMonentsTableViewCellDelegate +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(MonentsInfoModel *)monentsInfo{ + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; +} - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { - [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { - [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsLatestViewController1") confirmHandler:^{ - [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; - } cancelHandler:^{ - - }]; + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsLatestViewController1") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ + + }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { - __block MonentsInfoModel * monentsInfos; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { - monentsInfos = obj; - *stop = YES; - } - }]; - if (monentsInfos) { - NSInteger row = [self.datasource indexOfObject:monentsInfo]; - [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; - } + __block MonentsInfoModel * monentsInfos; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { + monentsInfos = obj; + *stop = YES; + } + }]; + if (monentsInfos) { + NSInteger row = [self.datasource indexOfObject:monentsInfo]; + [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; + } } #pragma mark -JXCategoryListContainerViewDelegate - (UIView *)listView { - return self.view; + return self.view; } #pragma mark - XPMonentsLatestProtocol - (void)getMonentsLatestListSuccess:(MonentsListInfoModel *)listInfo state:(int)state{ - self.listInfo = listInfo; - if (state == 0) { - [self.datasource removeAllObjects]; - } - if (listInfo.dynamicList.count > 0) { - [self.datasource addObjectsFromArray:listInfo.dynamicList]; - } - - if (state == 0) { - self.hasNoMoreData = NO; - [self.tableView.mj_header endRefreshing]; - } else { - if (listInfo.dynamicList.count > 0) { - self.hasNoMoreData = NO; - } else { - self.hasNoMoreData = YES; - } - [self.tableView.mj_footer endRefreshing]; - } - [self.tableView reloadData]; + self.listInfo = listInfo; + if (state == 0) { + [self.datasource removeAllObjects]; + } + if (listInfo.dynamicList.count > 0) { + [self.datasource addObjectsFromArray:listInfo.dynamicList]; + } + + if (state == 0) { + self.hasNoMoreData = NO; + [self.tableView.mj_header endRefreshing]; + } else { + if (listInfo.dynamicList.count > 0) { + self.hasNoMoreData = NO; + } else { + self.hasNoMoreData = YES; + } + [self.tableView.mj_footer endRefreshing]; + } + [self.tableView reloadData]; } - (void)getMonentsLatestListFail:(NSString *)msg state:(int)state { - if (state == 0) { - [self.tableView.mj_header endRefreshing]; - } else { - [self.tableView.mj_footer endRefreshing]; - } + if (state == 0) { + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj.dynamicId isEqualToString:dynamicId]) { - NSInteger count = obj.likeCount.integerValue; - obj.isLike = status; - if (status) { - count += 1; - } else { - count -= 1; - } - obj.likeCount = [NSString stringWithFormat:@"%ld", count]; - *stop = YES; - } - }]; - [self.tableView reloadData]; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + NSInteger count = obj.likeCount.integerValue; + obj.isLike = status; + if (status) { + count += 1; + } else { + count -= 1; + } + obj.likeCount = [NSString stringWithFormat:@"%ld", count]; + *stop = YES; + } + }]; + [self.tableView reloadData]; +} +-(void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } - - (void)deleteMonentsSuccess:(NSString *)monentsInfo { - [self showSuccessToast:YMLocalizedString(@"XPMonentsLatestViewController2")]; - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.integerValue) { - deleteInfo = obj; - } - }]; - - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + [self showSuccessToast:YMLocalizedString(@"XPMonentsLatestViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - Getters And Setters - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0); - _tableView.tableFooterView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + } + return _tableView; } - (NSMutableArray *)datasource { - if (!_datasource) { - _datasource = [NSMutableArray array]; - } - return _datasource; + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; } @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsRecommendViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsRecommendViewController.m index 93afcbce..959e6662 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsRecommendViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsRecommendViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsRecommendViewController.m -// YUMI +// XPMonentsRecommendViewController.m +// xplan-ios // -// Created by YUMI on 2022/5/11. +// Created by 冯硕 on 2022/5/11. // #import "XPMonentsRecommendViewController.h" @@ -10,12 +10,10 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" + + #import "XPMonentsLayoutConfig.h" #import "TTPopup.h" -#import "NSArray+Safe.h" -#import "ClientConfig.h" ///Model #import "MonentsInfoModel.h" #import "MonentsTopicModel.h" @@ -27,11 +25,11 @@ #import "XPMonentsEmptyTableViewCell.h" #import "XPMonentsRecommendHeaderView.h" #import "XPMonentsDetailViewController.h" -#import "XPMomentsSimpleDetailViewController.h" #import "XPMonentTopicContainerViewController.h" #import "XPMoentsTopicListViewController.h" -@interface XPMonentsRecommendViewController () +UIKIT_EXTERN NSString *kRequestRicket; +@interface XPMonentsRecommendViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///数据源 @@ -45,268 +43,303 @@ @end @implementation XPMonentsRecommendViewController - +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (__kindof id)createPresenter { - return [[XPMonentsRecommendPresenter alloc] init]; + return [[XPMonentsRecommendPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; - [self initHeaderAndFooterRrfresh]; - [self initSubViews]; - [self initSubViewConstraints]; + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.tableView]; - self.tableView.tableHeaderView = self.headerView; + [self.view addSubview:self.tableView]; + self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0); + self.tableView.tableHeaderView = self.headerView; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestRicketSuccess:) name:kRequestRicket object:nil]; + +} +-(void)requestRicketSuccess:(NSNotification *)not{ + if([not.object isKindOfClass:[NSDictionary class]])return; + BOOL is = [not.object boolValue]; + if(is == YES){ + [self headerRefresh]; + }else{ + [XNDJTDDLoadingTool hideOnlyView:self.tabBarController.view]; + } } #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { - MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; - header.stateLabel.font = [UIFont systemFontOfSize:10.0]; - header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; - header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; - self.tableView.mj_header = header; - - MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; - footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; - self.tableView.mj_footer = footer; - - [self headerRefresh]; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; + + [self headerRefresh]; } #pragma mark - 刷新的fangfa - (void)headerRefresh { - self.page = 1; - [self.presenter getMonentsRecommendList:self.page pageSize:20 state:0]; - [self.presenter getMonentsTopicList:self.page pageSize:20]; + [XNDJTDDLoadingTool showOnlyView:self.tabBarController.view]; + if([AccountInfoStorage instance].isRequestRicket == YES){ + return; + } + self.page = 1; + [self.presenter getMonentsRecommendList:self.page pageSize:20 state:0]; + [self.presenter getMonentsTopicList:self.page pageSize:20]; } - (void)footerRefresh { - if (self.hasNoMoreData) { - [self showErrorToast:YMLocalizedString(@"XPMonentsRecommendViewController0")]; - [self.tableView.mj_footer endRefreshing]; - return; - } - self.page++; - [self.presenter getMonentsRecommendList:self.page pageSize:20 state:1]; + if([AccountInfoStorage instance].isRequestRicket == YES)return; + if (self.hasNoMoreData) { + [self showErrorToast:YMLocalizedString(@"XPMonentsRecommendViewController0")]; + [self.tableView.mj_footer endRefreshing]; + return; + } + self.page++; + [self.presenter getMonentsRecommendList:self.page pageSize:20 state:1]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.datasource.count > 0 ? self.datasource.count : 1; + return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; - [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; - return monentInfo.rowHeight; - } - return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; + if (self.datasource.count > 0) { + MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; + [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; + + if(monentInfo.squareTop && monentInfo.content.length == 0){ + return monentInfo.rowHeight + 20 ; + }else{ + return monentInfo.rowHeight; + } + + } + return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - cell.monentsInfo = monentsInfo; - cell.delegate = self; - return cell; - } - XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - return cell; + if (self.datasource.count > 0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.monentsInfo = monentsInfo; + cell.delegate = self; + return cell; + } + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (self.datasource.count > 0) { - - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - - if ([ClientConfig shareConfig].canOpen) { - XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - }else{ - XPMomentsSimpleDetailViewController * detailVC = [[XPMomentsSimpleDetailViewController alloc] init]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - } - } + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (self.datasource.count > 0) { + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + detailVC.monentsInfo = monentsInfo; + detailVC.delegate = self; + [self.navigationController pushViewController:detailVC animated:YES]; + } } #pragma mark - XPMonentsDetailViewControllerDelegate - (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == dynamicId.integerValue) { - deleteInfo = obj; - } - }]; - - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - XPMonentsTableViewCellDelegate + +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(MonentsInfoModel *)monentsInfo{ + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; +} - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { - [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { - [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsTopicLatestViewController1") confirmHandler:^{ - [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; - } cancelHandler:^{ - - }]; + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsRecommendViewController1") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ + + }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { - __block MonentsInfoModel * monentsInfos; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { - monentsInfos = obj; - *stop = YES; - } - }]; - if (monentsInfos) { - NSInteger row = [self.datasource indexOfObject:monentsInfo]; - [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; - } + __block MonentsInfoModel * monentsInfos; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { + monentsInfos = obj; + *stop = YES; + } + }]; + if (monentsInfos) { + NSInteger row = [self.datasource indexOfObject:monentsInfo]; + [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; + } } #pragma mark - XPMonentsRecommendHeaderViewDelegate - (void)xPMonentsRecommendHeaderView:(XPMonentsRecommendHeaderView *)view didSelectItem:(MonentsTopicModel *)info { - XPMonentTopicContainerViewController * topicVC = [[XPMonentTopicContainerViewController alloc] init]; - topicVC.worldId = info.tId; - [self.navigationController pushViewController:topicVC animated:YES]; + XPMonentTopicContainerViewController * topicVC = [[XPMonentTopicContainerViewController alloc] init]; + topicVC.worldId = info.tId; + [self.navigationController pushViewController:topicVC animated:YES]; } - (void)xPMonentsRecommendHeaderView:(XPMonentsRecommendHeaderView *)view didClickMoreTopic:(UIButton *)sender { - XPMoentsTopicListViewController * topicListVC = [[XPMoentsTopicListViewController alloc] init]; - [self.navigationController pushViewController:topicListVC animated:YES]; + XPMoentsTopicListViewController * topicListVC = [[XPMoentsTopicListViewController alloc] init]; + [self.navigationController pushViewController:topicListVC animated:YES]; } #pragma mark -JXCategoryListContainerViewDelegate - (UIView *)listView { - return self.view; + return self.view; } #pragma mark - XPMonentsRecommendProtocol - (void)getMonentsRecommendListSuccess:(NSArray *)array state:(int)state { - if (state == 0) { - [self.datasource removeAllObjects]; - } - if (array.count > 0) { - [self.datasource addObjectsFromArray:array]; - } - - if (state == 0) { - self.hasNoMoreData = NO; - [self.tableView.mj_header endRefreshing]; - } else { - if (array.count > 0) { - self.hasNoMoreData = NO; - } else { - self.hasNoMoreData = YES; - } - [self.tableView.mj_footer endRefreshing]; - } - [self.tableView reloadData]; + if (state == 0) { + [self.datasource removeAllObjects]; + } + if (array.count > 0) { + [self.datasource addObjectsFromArray:array]; + } + + if (state == 0) { + self.hasNoMoreData = NO; + [self.tableView.mj_header endRefreshing]; + } else { + if (array.count > 0) { + self.hasNoMoreData = NO; + } else { + self.hasNoMoreData = YES; + } + [self.tableView.mj_footer endRefreshing]; + } + [XNDJTDDLoadingTool hideOnlyView:self.tabBarController.view]; + [self.tableView reloadData]; } - (void)getMonentsRecommendListFail:(NSString *)msg state:(int)state { - if (state == 0) { - [self.tableView.mj_header endRefreshing]; - } else { - [self.tableView.mj_footer endRefreshing]; - } + [XNDJTDDLoadingTool hideOnlyView:self.tabBarController.view]; + if (state == 0) { + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } } - (void)monentsTopicListSuccess:(NSArray *)array { - self.headerView.topicList = array; + self.headerView.topicList = array; } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj.dynamicId isEqualToString:dynamicId]) { - if (status) { - obj.isLike += 1; - } else { - obj.isLike -= 1; - } - *stop = YES; - } - }]; - [self.tableView reloadData]; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + if (status) { + obj.isLike += 1; + } else { + obj.isLike -= 1; + } + *stop = YES; + } + }]; + [self.tableView reloadData]; +} +-(void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } - - (void)deleteMonentsSuccess:(NSString *)monentsInfo { - [self showSuccessToast:YMLocalizedString(@"XPMonentsRecommendViewController2")]; - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.integerValue) { - deleteInfo = obj; - } - }]; - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + [self showSuccessToast:YMLocalizedString(@"XPMonentsRecommendViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - Getters And Setters - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0); - _tableView.tableFooterView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + } + return _tableView; } - (NSMutableArray *)datasource { - if (!_datasource) { - _datasource = [NSMutableArray array]; - } - return _datasource; + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; } - (XPMonentsRecommendHeaderView *)headerView { - if (!_headerView) { - _headerView = [[XPMonentsRecommendHeaderView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 110)]; - _headerView.delegate = self; - } - return _headerView; + if (!_headerView) { + _headerView = [[XPMonentsRecommendHeaderView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 145)]; + _headerView.delegate = self; + } + return _headerView; } @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsTopicLatestViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsTopicLatestViewController.m index 1c51421f..af87c4f1 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsTopicLatestViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsTopicLatestViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsTopicLatestViewController.m -// YUMI +// XPMonentsTopicLatestViewController.m +// xplan-ios // -// Created by YUMI on 2022/8/18. +// Created by 冯硕 on 2022/8/18. // #import "XPMonentsTopicLatestViewController.h" @@ -10,12 +10,9 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" + #import "XPMonentsLayoutConfig.h" #import "TTPopup.h" -#import "NSArray+Safe.h" -#import "ClientConfig.h" ///Model #import "MonentsListInfoModel.h" ///P @@ -25,9 +22,8 @@ #import "XPMonentsTableViewCell.h" #import "XPMonentsEmptyTableViewCell.h" #import "XPMonentsDetailViewController.h" -#import "XPMomentsSimpleDetailViewController.h" -@interface XPMonentsTopicLatestViewController () +@interface XPMonentsTopicLatestViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///数据源 @@ -39,253 +35,308 @@ @end @implementation XPMonentsTopicLatestViewController - +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (__kindof id)createPresenter { - return [[XPMonentsTopicLatestPresenter alloc] init]; + return [[XPMonentsTopicLatestPresenter alloc] init]; } - (void)viewDidLoad { - [super viewDidLoad]; - [self initHeaderAndFooterRrfresh]; - [self initSubViews]; - [self initSubViewConstraints]; -} + [super viewDidLoad]; + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(refreshDynamicData:) name:@"kRefreshDynamicData" object:nil]; +} +-(void)refreshDynamicData:(NSNotification *)not{ + NSDictionary *refreshData = not.object; + int type = [refreshData[@"type"] intValue]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + switch (type) { + case 0: + { + + NSString *dynamicId = refreshData[@"dynamicId"]; + BOOL status = [refreshData[@"status"] boolValue]; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + if (status) { + obj.isLike = YES; + obj.likeCount = [NSString stringWithFormat:@"%ld",obj.likeCount.integerValue + 1]; + } else { + obj.likeCount = [NSString stringWithFormat:@"%ld",(obj.likeCount.integerValue - 1 >= 0) ? (obj.likeCount.integerValue - 1) : 0]; + obj.isLike = NO; + } + *stop = YES; + } + }]; + + [self.tableView reloadData]; + break; + } + case 1: + { + + NSString *dynamicId = refreshData[@"dynamicId"]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + + *stop = YES; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } + break; + } + case 2: + { + NSString *dynamicId = refreshData[@"dynamicId"]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + *stop = YES; + + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } + break; + } + default: + { + NSString *dynamicId = refreshData[@"dynamicId"]; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + obj.commentCount = [NSString stringWithFormat:@"%ld",obj.commentCount.integerValue + 1]; + *stop = YES; + } + }]; + + [self.tableView reloadData]; + break; + } + } +} #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.tableView]; + [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; } #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { - MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; - header.stateLabel.font = [UIFont systemFontOfSize:10.0]; - header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; - header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; - self.tableView.mj_header = header; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; + self.tableView.mj_header = header; - MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; - footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; - self.tableView.mj_footer = footer; + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; - [self headerRefresh]; + [self headerRefresh]; } #pragma mark - 刷新的fangfa - (void)headerRefresh { - [self.presenter getMonentsTopicLatestList:@"" worldId:self.worldId state:0]; + [self.presenter getMonentsTopicLatestList:@"" worldId:self.worldId state:0]; } - (void)footerRefresh { - if (self.hasNoMoreData) { - [self showErrorToast:YMLocalizedString(@"XPMonentsTopicLatestViewController0")]; - [self.tableView.mj_footer endRefreshing]; - return; - } - [self.presenter getMonentsTopicLatestList:self.listInfo.nextDynamicId worldId:self.worldId state:1]; + if (self.hasNoMoreData) { + [self showErrorToast:YMLocalizedString(@"XPMonentsTopicLatestViewController0")]; + [self.tableView.mj_footer endRefreshing]; + return; + } + [self.presenter getMonentsTopicLatestList:self.listInfo.nextDynamicId worldId:self.worldId state:1]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.datasource.count > 0 ? self.datasource.count : 1; + return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; - [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; - return monentInfo.rowHeight; - } - return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; + if (self.datasource.count > 0) { + MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; + [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; + if(monentInfo.squareTop && monentInfo.content.length == 0){ + return monentInfo.rowHeight + 20 ; + }else{ + return monentInfo.rowHeight; + } + } + return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - cell.delegate = self; - cell.monentsInfo = monentsInfo; - return cell; - } - XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - return cell; + if (self.datasource.count > 0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.delegate = self; + cell.monentsInfo = monentsInfo; + return cell; + } + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (self.datasource.count > 0) { - - if ([ClientConfig shareConfig].canOpen) { - XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - }else{ - XPMomentsSimpleDetailViewController * detailVC = [[XPMomentsSimpleDetailViewController alloc] init]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - } - } + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (self.datasource.count > 0) { + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + detailVC.monentsInfo = monentsInfo; + [self.navigationController pushViewController:detailVC animated:YES]; + } } #pragma mark - XPMonentsTableViewCellDelegate +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(MonentsInfoModel *)monentsInfo{ + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; +} - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { - [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { - [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsTopicLatestViewController1") confirmHandler:^{ - [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; - } cancelHandler:^{ + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsTopicLatestViewController1") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ - }]; + }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { - __block MonentsInfoModel * monentsInfos; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { - monentsInfos = obj; - *stop = YES; - } - }]; - if (monentsInfos) { - NSInteger row = [self.datasource indexOfObject:monentsInfo]; - [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; - } + __block MonentsInfoModel * monentsInfos; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { + monentsInfos = obj; + *stop = YES; + } + }]; + if (monentsInfos) { + NSInteger row = [self.datasource indexOfObject:monentsInfo]; + [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; + } } #pragma mark - JXPagingViewListViewDelegate - (UIScrollView *)listScrollView { - return self.tableView; + return self.tableView; } - (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { - self.scrollCallback = callback; + self.scrollCallback = callback; } - (UIView *)listView { - return self.view; + return self.view; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { - self.scrollCallback(scrollView); + self.scrollCallback(scrollView); } -#pragma mark - XPMonentsDetailViewControllerDelegate -- (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == dynamicId.integerValue) { - deleteInfo = obj; - } - }]; - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } -} #pragma mark - XPMonentsTopicLatestProtocol - (void)getMonentsTopicLatestListSuccess:(MonentsListInfoModel *)listInfo state:(int)state{ - self.listInfo = listInfo; - if (state == 0) { - [self.datasource removeAllObjects]; - } - if (listInfo.dynamicList.count > 0) { - [self.datasource addObjectsFromArray:listInfo.dynamicList]; - } + self.listInfo = listInfo; + if (state == 0) { + [self.datasource removeAllObjects]; + } + if (listInfo.dynamicList.count > 0) { + [self.datasource addObjectsFromArray:listInfo.dynamicList]; + } - if (state == 0) { - self.hasNoMoreData = NO; - [self.tableView.mj_header endRefreshing]; - } else { - if (listInfo.dynamicList.count > 0) { - self.hasNoMoreData = NO; - } else { - self.hasNoMoreData = YES; - } - [self.tableView.mj_footer endRefreshing]; - } - [self.tableView reloadData]; + if (state == 0) { + self.hasNoMoreData = NO; + [self.tableView.mj_header endRefreshing]; + } else { + if (listInfo.dynamicList.count > 0) { + self.hasNoMoreData = NO; + } else { + self.hasNoMoreData = YES; + } + [self.tableView.mj_footer endRefreshing]; + } + [self.tableView reloadData]; } - (void)getMonentsTopicLatestListFail:(NSString *)msg state:(int)state { - if (state == 0) { - [self.tableView.mj_header endRefreshing]; - } else { - [self.tableView.mj_footer endRefreshing]; - } + if (state == 0) { + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj.dynamicId isEqualToString:dynamicId]) { - if (status) { - obj.isLike += 1; - } else { - obj.isLike -= 1; - } - *stop = YES; - } - }]; - [self.tableView reloadData]; + + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":dynamicId,@"type":@"0",@"status":@(status)}]; +} +- (void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":monentsInfo,@"type":@"2"}]; } - - (void)deleteMonentsSuccess:(NSString *)monentsInfo { - [self showSuccessToast:YMLocalizedString(@"XPMonentsTopicLatestViewController2")]; - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.integerValue) { - deleteInfo = obj; - } - }]; - - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + [self showSuccessToast:YMLocalizedString(@"XPMonentsTopicLatestViewController2")]; + ///type,0=点赞,1=删除,2=屏蔽,3=评论 + [[NSNotificationCenter defaultCenter]postNotificationName:@"kRefreshDynamicData" object:@{@"dynamicId":monentsInfo,@"type":@"1"}]; + } #pragma mark - Getters And Setters - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.tableFooterView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + } + return _tableView; } - (NSMutableArray *)datasource { - if (!_datasource) { - _datasource = [NSMutableArray array]; - } - return _datasource; + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; } @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsTopicRecommondViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsTopicRecommondViewController.m index da4f79d4..e7188b5b 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsTopicRecommondViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsTopicRecommondViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsTopicRecommondViewController.m -// YUMI +// XPMonentsTopicRecommondViewController.m +// xplan-ios // -// Created by YUMI on 2022/8/18. +// Created by 冯硕 on 2022/8/18. // #import "XPMonentsTopicRecommondViewController.h" @@ -10,12 +10,9 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" + #import "XPMonentsLayoutConfig.h" #import "TTPopup.h" -#import "NSArray+Safe.h" -#import "ClientConfig.h" ///Model #import "MonentsListInfoModel.h" ///P @@ -25,7 +22,6 @@ #import "XPMonentsTableViewCell.h" #import "XPMonentsEmptyTableViewCell.h" #import "XPMonentsDetailViewController.h" -#import "XPMomentsSimpleDetailViewController.h" @interface XPMonentsTopicRecommondViewController () ///列表 @@ -41,251 +37,266 @@ @implementation XPMonentsTopicRecommondViewController - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (__kindof id)createPresenter { - return [[XPMonentsTopicRecommendPresenter alloc] init]; + return [[XPMonentsTopicRecommendPresenter alloc] init]; } - (void)viewDidLoad { - [super viewDidLoad]; - [self initHeaderAndFooterRrfresh]; - [self initSubViews]; - [self initSubViewConstraints]; + [super viewDidLoad]; + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.tableView]; + [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; } #pragma mark - 下拉刷新 - (void)initHeaderAndFooterRrfresh { - MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; - header.stateLabel.font = [UIFont systemFontOfSize:10.0]; - header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; - header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; - self.tableView.mj_header = header; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; + self.tableView.mj_header = header; - MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; - footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; - footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; - self.tableView.mj_footer = footer; + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; - [self headerRefresh]; + [self headerRefresh]; } #pragma mark - 刷新的fangfa - (void)headerRefresh { - [self.presenter getMonentsTopicRecommendList:@"" worldId:self.worldId state:0]; + [self.presenter getMonentsTopicRecommendList:@"" worldId:self.worldId state:0]; } - (void)footerRefresh { - if (self.hasNoMoreData) { - [self showErrorToast:YMLocalizedString(@"XPMonentsTopicRecommondViewController0")]; - [self.tableView.mj_footer endRefreshing]; - return; - } - [self.presenter getMonentsTopicRecommendList:self.listInfo.nextDynamicId worldId:self.worldId state:1]; + if (self.hasNoMoreData) { + [self showErrorToast:YMLocalizedString(@"XPMonentsTopicRecommondViewController0")]; + [self.tableView.mj_footer endRefreshing]; + return; + } + [self.presenter getMonentsTopicRecommendList:self.listInfo.nextDynamicId worldId:self.worldId state:1]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.datasource.count > 0 ? self.datasource.count : 1; + return self.datasource.count > 0 ? self.datasource.count : 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; - [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; - return monentInfo.rowHeight; - } - return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; + if (self.datasource.count > 0) { + MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; + [XPMonentsLayoutConfig layoutMonentsModel:monentInfo]; + if(monentInfo.squareTop && monentInfo.content.length == 0){ + return monentInfo.rowHeight + 20 ; + }else{ + return monentInfo.rowHeight; + } + } + return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - cell.delegate = self; - cell.monentsInfo = monentsInfo; - return cell; - } - XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - return cell; + if (self.datasource.count > 0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.delegate = self; + cell.isTopic = YES; + cell.monentsInfo = monentsInfo; + return cell; + } + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (self.datasource.count > 0) { - - if ([ClientConfig shareConfig].canOpen) { - XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - }else{ - XPMomentsSimpleDetailViewController * detailVC = [[XPMomentsSimpleDetailViewController alloc] init]; - MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - detailVC.monentsInfo = monentsInfo; - detailVC.delegate = self; - [self.navigationController pushViewController:detailVC animated:YES]; - } - } + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (self.datasource.count > 0) { + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + detailVC.monentsInfo = monentsInfo; + detailVC.delegate = self; + [self.navigationController pushViewController:detailVC animated:YES]; + } } #pragma mark - XPMonentsDetailViewControllerDelegate -- (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == dynamicId.integerValue) { - deleteInfo = obj; - } - }]; - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } +- (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - XPMonentsTableViewCellDelegate +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(MonentsInfoModel *)monentsInfo{ + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; +} - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { - [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { - [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsTopicLatestViewController1") confirmHandler:^{ - [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; - } cancelHandler:^{ + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsTopicRecommondViewController1") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ - }]; + }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { - __block MonentsInfoModel * monentsInfos; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { - monentsInfos = obj; - *stop = YES; - } - }]; - if (monentsInfos) { - NSInteger row = [self.datasource indexOfObject:monentsInfo]; - [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; - } + __block MonentsInfoModel * monentsInfos; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { + monentsInfos = obj; + *stop = YES; + } + }]; + if (monentsInfos) { + NSInteger row = [self.datasource indexOfObject:monentsInfo]; + [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; + } } #pragma mark - JXPagingViewListViewDelegate - (UIScrollView *)listScrollView { - return self.tableView; + return self.tableView; } - (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { - self.scrollCallback = callback; + self.scrollCallback = callback; } - (UIView *)listView { - return self.view; + return self.view; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { - self.scrollCallback(scrollView); + self.scrollCallback(scrollView); } #pragma mark - XPMonentsRecommendProtocol - (void)getMonentsTopicRecommendListSuccess:(MonentsListInfoModel *)listInfo state:(int)state { - self.listInfo = listInfo; - if (state == 0) { - [self.datasource removeAllObjects]; - } - if (listInfo.dynamicList.count > 0) { - [self.datasource addObjectsFromArray:listInfo.dynamicList]; - } + self.listInfo = listInfo; + if (state == 0) { + [self.datasource removeAllObjects]; + } + if (listInfo.dynamicList.count > 0) { + [self.datasource addObjectsFromArray:listInfo.dynamicList]; + } - if (state == 0) { - self.hasNoMoreData = NO; - [self.tableView.mj_header endRefreshing]; - } else { - if (listInfo.dynamicList.count > 0) { - self.hasNoMoreData = NO; - } else { - self.hasNoMoreData = YES; - } - [self.tableView.mj_footer endRefreshing]; - } - [self.tableView reloadData]; + if (state == 0) { + self.hasNoMoreData = NO; + [self.tableView.mj_header endRefreshing]; + } else { + if (listInfo.dynamicList.count > 0) { + self.hasNoMoreData = NO; + } else { + self.hasNoMoreData = YES; + } + [self.tableView.mj_footer endRefreshing]; + } + [self.tableView reloadData]; } - (void)getMonentsTopicRecommendListFail:(NSString *)msg state:(int)state { - if (state == 0) { - [self.tableView.mj_header endRefreshing]; - } else { - [self.tableView.mj_footer endRefreshing]; - } + if (state == 0) { + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj.dynamicId isEqualToString:dynamicId]) { - if (status) { - obj.isLike += 1; - } else { - obj.isLike -= 1; - } - *stop = YES; - } - }]; - [self.tableView reloadData]; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + if (status) { + obj.isLike += 1; + } else { + obj.isLike -= 1; + } + *stop = YES; + } + }]; + [self.tableView reloadData]; } +-(void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } +} - (void)deleteMonentsSuccess:(NSString *)monentsInfo { - [self showSuccessToast:YMLocalizedString(@"XPMonentsTopicRecommondViewController2")]; - __block MonentsInfoModel * deleteInfo; - [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.dynamicId.integerValue == monentsInfo.integerValue) { - deleteInfo = obj; - } - }]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsTopicRecommondViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; - if (deleteInfo) { - [self.datasource removeObject:deleteInfo]; - [self.tableView reloadData]; - } + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - Getters And Setters - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.tableFooterView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; - [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsTableViewCell class])]; + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + } + return _tableView; } - (NSMutableArray *)datasource { - if (!_datasource) { - _datasource = [NSMutableArray array]; - } - return _datasource; + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; } @end diff --git a/YuMi/Modules/YMMonents/View/XPMonentsViewController.m b/YuMi/Modules/YMMonents/View/XPMonentsViewController.m index effe49c3..d02ed070 100644 --- a/YuMi/Modules/YMMonents/View/XPMonentsViewController.m +++ b/YuMi/Modules/YMMonents/View/XPMonentsViewController.m @@ -1,8 +1,8 @@ // -// YMMonentsViewController.m -// YUMI +// XPMonentsViewController.m +// xplan-ios // -// Created by YUMI on 2022/5/11. +// Created by 冯硕 on 2022/5/11. // #import "XPMonentsViewController.h" @@ -11,9 +11,7 @@ #import #import #import -///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" + ///Tool #import "AttachMentModel.h" #import "MonentsUnReadModel.h" @@ -24,7 +22,8 @@ #import "XPMonentsInteractiveViewController.h" #import "XPMonentsPublishViewController.h" -@interface XPMonentsViewController () + +@interface XPMonentsViewController () ///标题 @property (nonatomic,strong) NSArray *titles; ///导航栏 @@ -36,6 +35,7 @@ ///滑块 @property (nonatomic,strong) JXCategoryTitleView *titleView; @property (nonatomic, strong) JXCategoryListContainerView *listContainerView; + ///发布的按钮 @property (nonatomic,strong) UIButton *publishButton; ///关注 @@ -47,233 +47,240 @@ @end @implementation XPMonentsViewController -@synthesize parentMode = _parentMode; - (void)dealloc { - [[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self]; + [[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self]; } - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (void)viewDidLoad { - [super viewDidLoad]; - [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]; - [self initSubViews]; - [self initSubViewConstraints]; + [super viewDidLoad]; + [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]; + [self initSubViews]; + [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.navView]; - [self.view addSubview:self.listContainerView]; - [self.view addSubview:self.publishButton]; - - [self.navView addSubview:self.titleView]; - [self.navView addSubview:self.messageButton]; - [self.navView addSubview:self.dotView]; + [self.view addSubview:self.navView]; + [self.view addSubview:self.listContainerView]; + [self.view addSubview:self.publishButton]; + + [self.navView addSubview:self.titleView]; + [self.navView addSubview:self.messageButton]; + [self.navView addSubview:self.dotView]; + self.dotView.hidden = self.tabBarItem.badgeValue == 0; } - (void)initSubViewConstraints { - [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.mas_equalTo(self.view); - make.height.mas_equalTo(kNavigationHeight); - }]; - - [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.navView); - make.height.mas_equalTo(20); - make.top.mas_equalTo(self.navView).offset(kSafeAreaTopHeight + 40); - }]; - - [self.messageButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.mas_equalTo(self.titleView); - make.right.mas_equalTo(self.navView).offset(-15); - make.size.mas_equalTo(CGSizeMake(22, 22)); - }]; - - [self.dotView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(10, 10)); - make.centerY.mas_equalTo(self.messageButton.mas_top); - make.centerX.mas_equalTo(self.messageButton.mas_right); - }]; - - [self.listContainerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.bottom.mas_equalTo(self.view); - make.top.mas_equalTo(self.navView.mas_bottom); - }]; - - [self.publishButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(45, 45)); - make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight - 60); - make.right.mas_equalTo(self.view).offset(-25); - }]; + [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.height.mas_equalTo(kNavigationHeight); + }]; + + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.navView); + make.height.mas_equalTo(45); + make.top.mas_equalTo(self.navView).offset(kSafeAreaTopHeight + 20); + }]; + + [self.messageButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.titleView); + make.right.mas_equalTo(self.navView).offset(-15); + make.size.mas_equalTo(CGSizeMake(22, 22)); + }]; + + [self.dotView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(10, 10)); + make.centerY.mas_equalTo(self.messageButton.mas_top); + make.centerX.mas_equalTo(self.messageButton.mas_right); + }]; + + [self.listContainerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.mas_equalTo(self.view); + make.top.mas_equalTo(self.navView.mas_bottom); + }]; + + [self.publishButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(45, 45)); + make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight - 30); + make.right.mas_equalTo(self.view).offset(-15); + }]; } #pragma mark - JXCategoryListContainerViewDelegate - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { - return self.titles.count; + return self.titles.count; } + // 根据下标 index 返回对应遵守并实现 `JXCategoryListContentViewDelegate` 协议的列表实例 - (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { - UIViewController * list = (UIViewController *)[self.listContainerView.validListDict objectForKey:[NSNumber numberWithInteger:index]]; - if (list) { - return list; - } else { - if (index == 0) { - return self.attentionVC; - }else if (index == 1) { - return self.recommendVC; - } else if(index == 2) { - return self.latestVC; - } - return nil; - } + UIViewController * list = (UIViewController *)[self.listContainerView.validListDict objectForKey:[NSNumber numberWithInteger:index]]; + if (list) { + return list; + } else { + if (index == 0) { + return self.attentionVC; + }else if (index == 1) { + return self.recommendVC; + } else if(index == 2) { + return self.latestVC; + } + return nil; + } } #pragma mark -NIMSystemNotificationManagerDelegate - (void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification *)notification { - if (notification.receiverType == NIMSessionTypeP2P) { - if (notification.content != nil) { - AttachmentModel *attachment = [AttachmentModel modelWithJSON:notification.content]; - if (attachment.first == CustomMessageType_Monents && attachment.second == Custom_Message_Sub_Monents_Unread_Update) { - MonentsUnReadModel * unreadModel = [MonentsUnReadModel modelWithDictionary:attachment.data]; - if (unreadModel.total > 0) { - self.dotView.hidden = NO; - } else { - self.dotView.hidden = YES; - } - [self setTabBarItemBadge:unreadModel.total]; - } - } - } + if (notification.receiverType == NIMSessionTypeP2P) { + if (notification.content != nil) { + AttachmentModel *attachment = [AttachmentModel modelWithJSON:notification.content]; + if (attachment.first == CustomMessageType_Monents && attachment.second == Custom_Message_Sub_Monents_Unread_Update) { + MonentsUnReadModel * unreadModel = [MonentsUnReadModel modelWithDictionary:attachment.data]; + if (unreadModel.total > 0) { + self.dotView.hidden = NO; + } else { + self.dotView.hidden = YES; + } + [self setTabBarItemBadge:unreadModel.total]; + } + } + } } - (void)setTabBarItemBadge:(NSInteger)value { - if (value > 0) { - if (value > 99) { - [self.tabBarItem setBadgeValue:@"99+"]; - } else { - [self.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%ld", value]]; - } - } else { - [self.tabBarItem setBadgeValue:nil]; - } + if (value > 0) { + if (value > 99) { + [self.tabBarItem setBadgeValue:@"99+"]; + } else { + [self.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%ld", value]]; + } + } else { + [self.tabBarItem setBadgeValue:nil]; + } } #pragma mark - Event Response - (void)messageButtonAction:(UIButton *)sender { - XPMonentsInteractiveViewController * messageVC = [[XPMonentsInteractiveViewController alloc] init]; - [self.navigationController pushViewController:messageVC animated:YES]; + XPMonentsInteractiveViewController * messageVC = [[XPMonentsInteractiveViewController alloc] init]; + [self.navigationController pushViewController:messageVC animated:YES]; } - (void)publishButtonAction:(UIButton *)sender { - XPMonentsPublishViewController * publishVC = [[XPMonentsPublishViewController alloc] init]; - [self.navigationController pushViewController:publishVC animated:YES]; + XPMonentsPublishViewController * publishVC = [[XPMonentsPublishViewController alloc] init]; + [self.navigationController pushViewController:publishVC animated:YES]; } #pragma mark - Getters And Setters - (JXCategoryListContainerView *)listContainerView { - if (!_listContainerView) { - _listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; - _listContainerView.listCellBackgroundColor = [UIColor clearColor]; - } - return _listContainerView; + if (!_listContainerView) { + _listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; + _listContainerView.listCellBackgroundColor = [UIColor clearColor]; + } + return _listContainerView; } - (JXCategoryTitleView *)titleView { - if (!_titleView) { - _titleView = [[JXCategoryTitleView alloc] initWithFrame:CGRectZero]; - _titleView.backgroundColor =[UIColor clearColor]; - _titleView.delegate = self; - _titleView.titleColor = [DJDKMIMOMColor secondTextColor]; - _titleView.titleSelectedColor = [DJDKMIMOMColor mainTextColor]; - _titleView.titleFont = [UIFont systemFontOfSize:15 weight:UIFontWeightSemibold]; - _titleView.titleSelectedFont = [UIFont systemFontOfSize:20 weight:UIFontWeightHeavy]; - _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; - _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; - _titleView.averageCellSpacingEnabled = NO; - _titleView.defaultSelectedIndex = 0; - _titleView.cellSpacing = 20; - _titleView.titles = self.titles; - _titleView.listContainer = self.listContainerView; - _titleView.defaultSelectedIndex = 1; - CGFloat itemWidth = [YMLocalizedString(@"XPMonentsViewController0") boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20 weight:UIFontWeightHeavy]} context:nil].size.width; - _titleView.cellWidth = itemWidth; - _titleView.contentEdgeInsetLeft = (KScreenWidth - itemWidth * self.titles.count - 20 * (self.titles.count - 1))/ 2; - } - return _titleView; + if (!_titleView) { + _titleView = [[JXCategoryTitleView alloc] initWithFrame:CGRectZero]; + _titleView.backgroundColor =[UIColor clearColor]; + _titleView.delegate = self; + _titleView.titleColor = [DJDKMIMOMColor secondTextColor]; + _titleView.titleSelectedColor = [DJDKMIMOMColor mainTextColor]; + _titleView.titleFont = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold]; + _titleView.titleSelectedFont = [UIFont systemFontOfSize:22 weight:UIFontWeightHeavy]; + _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; + _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; + _titleView.averageCellSpacingEnabled = NO; + _titleView.defaultSelectedIndex = 0; + _titleView.cellSpacing = 26; + _titleView.titles = self.titles; + _titleView.listContainer = self.listContainerView; + _titleView.defaultSelectedIndex = 1; + _titleView.contentEdgeInsetLeft = 15; + + JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; + lineView.indicatorImageViewSize = CGSizeMake(45, 10); + lineView.verticalMargin = 7; + lineView.indicatorImageView.image = [UIImage imageNamed:@"mine_dynamic"]; + _titleView.indicators = @[lineView]; + + } + return _titleView; } - (UIView *)navView { - if (!_navView) { - _navView = [[UIView alloc] init]; - _navView.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor]; - } - return _navView; + if (!_navView) { + _navView = [[UIView alloc] init]; + _navView.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor]; + } + return _navView; } - (NSArray *)titles { - if (!_titles) { - _titles = @[YMLocalizedString(@"XPMonentsViewController1"),YMLocalizedString(@"XPMonentsViewController2"), YMLocalizedString(@"XPMonentsViewController3")]; - } - return _titles; + if (!_titles) { + _titles = @[YMLocalizedString(@"XPMonentsViewController1"),YMLocalizedString(@"XPMonentsViewController2"), YMLocalizedString(@"XPMonentsViewController3")]; + } + return _titles; } - (UIButton *)messageButton { - if (!_messageButton) { - _messageButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_messageButton setImage:[UIImage imageNamed:@"monents_nav_interavtive_message"] forState:UIControlStateNormal]; - [_messageButton setImage:[UIImage imageNamed:@"monents_nav_interavtive_message"] forState:UIControlStateSelected]; - [_messageButton addTarget:self action:@selector(messageButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _messageButton; + if (!_messageButton) { + _messageButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_messageButton setImage:[UIImage imageNamed:@"monents_nav_interavtive_message"] forState:UIControlStateNormal]; + [_messageButton setImage:[UIImage imageNamed:@"monents_nav_interavtive_message"] forState:UIControlStateSelected]; + [_messageButton addTarget:self action:@selector(messageButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _messageButton; } - (UIView *)dotView { - if (!_dotView) { - _dotView = [[UIView alloc] init]; - _dotView.backgroundColor = UIColorFromRGB(0xFF2D55); - _dotView.layer.masksToBounds = YES; - _dotView.layer.cornerRadius = 5; - _dotView.hidden = YES; - } - return _dotView; + if (!_dotView) { + _dotView = [[UIView alloc] init]; + _dotView.backgroundColor = UIColorFromRGB(0xFF2D55); + _dotView.layer.masksToBounds = YES; + _dotView.layer.cornerRadius = 5; + _dotView.hidden = YES; + } + return _dotView; } - (UIButton *)publishButton { - if (!_publishButton) { - _publishButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_publishButton setImage:[UIImage imageNamed:@"monents_publish"] forState:UIControlStateNormal]; - [_publishButton setImage:[UIImage imageNamed:@"monents_publish"] forState:UIControlStateSelected]; - [_publishButton addTarget:self action:@selector(publishButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _publishButton; + if (!_publishButton) { + _publishButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_publishButton setImage:[UIImage imageNamed:@"monents_publish"] forState:UIControlStateNormal]; + [_publishButton setImage:[UIImage imageNamed:@"monents_publish"] forState:UIControlStateSelected]; + [_publishButton addTarget:self action:@selector(publishButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _publishButton; } - (XPMonentsAttentionViewController *)attentionVC { - if (!_attentionVC) { - XPMonentsAttentionViewController * attentionVC = [[XPMonentsAttentionViewController alloc] init]; - _attentionVC = attentionVC; - } - return _attentionVC; + if (!_attentionVC) { + XPMonentsAttentionViewController * attentionVC = [[XPMonentsAttentionViewController alloc] init]; + _attentionVC = attentionVC; + } + return _attentionVC; } - (XPMonentsLatestViewController *)latestVC { - if (!_latestVC) { - _latestVC = [[XPMonentsLatestViewController alloc] init]; - } - return _latestVC; + if (!_latestVC) { + _latestVC = [[XPMonentsLatestViewController alloc] init]; + } + return _latestVC; } - (XPMonentsRecommendViewController *)recommendVC { - if (!_recommendVC) { - _recommendVC = [[XPMonentsRecommendViewController alloc] init]; - } - return _recommendVC; + if (!_recommendVC) { + _recommendVC = [[XPMonentsRecommendViewController alloc] init]; + } + return _recommendVC; } + @end diff --git a/YuMi/Structure/PrefixHeader.pch b/YuMi/Structure/PrefixHeader.pch index b92d0d08..79413a1d 100644 --- a/YuMi/Structure/PrefixHeader.pch +++ b/YuMi/Structure/PrefixHeader.pch @@ -40,4 +40,5 @@ #import #import "StatisticsServiceHelper.h" #import "YUMIConstant.h" +#import "YUMINNNN.h" #endif /* PrefixHeader_pch */ diff --git a/YuMi/zh-Hans.lproj/Localizable.strings b/YuMi/zh-Hans.lproj/Localizable.strings index 0d8ed0bf..4f244da0 100644 --- a/YuMi/zh-Hans.lproj/Localizable.strings +++ b/YuMi/zh-Hans.lproj/Localizable.strings @@ -89,11 +89,12 @@ "PLTimeUtil3" = "yyyy年MM月"; "PLTimeUtil4" = "MM月dd日"; -"NSString_Utils0" = "%@万"; -"NSString_Utils1" = "MM月dd日"; -"NSString_Utils2" = "YYYY年MM月dd日"; -"NSString_Utils3" = "刚刚"; -"NSString_Utils4" = "%ld分钟前"; +///NSString+Utils.m +"NSString_Utils0" = "MM月dd日"; +"NSString_Utils1" = "YYYY年MM月dd日"; +"NSString_Utils2" = "刚刚"; +"NSString_Utils3" = "%ld分钟前"; +"NSString_Utils4" = "%@万"; "QEmotionBoardView0" = "发送"; @@ -2007,8 +2008,10 @@ "XPMonentsAttentionViewController1" = "删除后不可恢复\n确定删除该动态吗"; "XPMonentsAttentionViewController2" = "删除成功"; -"XPMonentsMineViewController0" = "删除后不可恢复\n确定删除该动态吗"; +///XPMonentsMineViewController.m +"XPMonentsMineViewController0" = "删除后不可恢复\n确定删除该动态吗?"; "XPMonentsMineViewController1" = "删除成功"; +"XPMonentsMineViewController2" = "屏蔽成功"; "XPMonentsViewController0" = "推荐"; "XPMonentsViewController1" = "关注"; @@ -2017,25 +2020,31 @@ "XPMonentsRecommendHeaderView0" = "推荐话题"; -"XPMonentsContentView0" = "展开"; -"XPMonentsContentView1" = "收起"; +///XPMonentsContentView.m +"XPMonentsContentView0" = "置顶 "; +"XPMonentsContentView1" = "展开"; +"XPMonentsContentView2" = "收起"; "XPMoentsTopicListView0" = "没有更多数据了"; "XPMonentsPublishTopicView0" = "添加话题"; "XPMonentsPublishTopicView1" = "重新选择"; -"XPMonentsUserInfoView0" = "直播中"; +///XPMonentsUserInfoView.m +"XPMonentsUserInfoView0" = "删除"; +"XPMonentsUserInfoView1" = "举报"; +"XPMonentsUserInfoView2" = "直播中"; +///XPMonentsTooBarView.m "XPMonentsTooBarView0" = "删除"; -"XPMonentsTooBarView1" = "举报"; -"XPMonentsTooBarView2" = "您的请求我们已经收到,我们将儘快处理"; -"XPMonentsTooBarView3" = "好友"; -"XPMonentsTooBarView4" = "朋友圈"; -"XPMonentsTooBarView5" = "微信好友"; -"XPMonentsTooBarView6" = "QQ好友"; -"XPMonentsTooBarView7" = "QQ空间"; -"XPMonentsTooBarView8" = "%@发佈了一条动态"; +"XPMonentsTooBarView1" = "举报动态或用户"; +"XPMonentsTooBarView2" = "好友"; +"XPMonentsTooBarView3" = "朋友圈"; +"XPMonentsTooBarView4" = "微信好友"; +"XPMonentsTooBarView5" = "QQ好友"; +"XPMonentsTooBarView6" = "QQ空间"; +"XPMonentsTooBarView7" = "%@发布了一条动态"; +"XPMonentsTooBarView8" = "屏蔽动态"; "XPMonentPublishSuccessView0" = "审核中"; "XPMonentPublishSuccessView1" = "咻,收到小可爱的动态了呢~\n审核通过后小秘书会帮你发送并通知你哦"; @@ -2212,7 +2221,7 @@ "LoginVerifCodeViewController4" = "重新获取"; "XPLoginViewController11" = "同意隐私政策和用户协议后,才可以注册登录哦~"; -"XPMonentsMineViewController2" = "删除后不可恢複\n确定删除该动态吗?"; + "PKLoginViewController1" = "同意隐私政策和用户协议后,才可以注册登录哦~"; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index adf8de0d..38341f0e 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -89,11 +89,12 @@ "PLTimeUtil3" = "yyyy年MM月"; "PLTimeUtil4" = "MM月dd日"; -"NSString_Utils0" = "%@萬"; -"NSString_Utils1" = "MM月dd日"; -"NSString_Utils2" = "YYYY年MM月dd日"; -"NSString_Utils3" = "剛剛"; -"NSString_Utils4" = "%ld分鐘前"; +///NSString+Utils.m +"NSString_Utils0" = "MM月dd日"; +"NSString_Utils1" = "YYYY年MM月dd日"; +"NSString_Utils2" = "剛剛"; +"NSString_Utils3" = "%ld分鐘前"; +"NSString_Utils4" = "%@萬"; "QEmotionBoardView0" = "發送"; @@ -2014,8 +2015,10 @@ "XPMonentsAttentionViewController1" = "刪除後不可恢復\n確定刪除該動態嗎"; "XPMonentsAttentionViewController2" = "刪除成功"; -"XPMonentsMineViewController0" = "刪除後不可恢復\n確定刪除該動態嗎"; +///XPMonentsMineViewController.m +"XPMonentsMineViewController0" = "刪除後不可恢復\n確定刪除該動態嗎?"; "XPMonentsMineViewController1" = "刪除成功"; +"XPMonentsMineViewController2" = "屏蔽成功"; "XPMonentsViewController0" = "推薦"; "XPMonentsViewController1" = "關註"; @@ -2024,25 +2027,31 @@ "XPMonentsRecommendHeaderView0" = "推薦話題"; -"XPMonentsContentView0" = "展開"; -"XPMonentsContentView1" = "收起"; +///XPMonentsContentView.m +"XPMonentsContentView0" = "置頂 "; +"XPMonentsContentView1" = "展開"; +"XPMonentsContentView2" = "收起"; "XPMoentsTopicListView0" = "沒有更多數據了"; "XPMonentsPublishTopicView0" = "添加話題"; "XPMonentsPublishTopicView1" = "重新選擇"; -"XPMonentsUserInfoView0" = "直播中"; +///XPMonentsUserInfoView.m +"XPMonentsUserInfoView0" = "刪除"; +"XPMonentsUserInfoView1" = "舉報"; +"XPMonentsUserInfoView2" = "直播中"; +///XPMonentsTooBarView.m "XPMonentsTooBarView0" = "刪除"; -"XPMonentsTooBarView1" = "舉報"; -"XPMonentsTooBarView2" = "您的請求我們已經收到,我們將儘快處理"; -"XPMonentsTooBarView3" = "好友"; -"XPMonentsTooBarView4" = "朋友圈"; -"XPMonentsTooBarView5" = "微信好友"; -"XPMonentsTooBarView6" = "QQ好友"; -"XPMonentsTooBarView7" = "QQ空間"; -"XPMonentsTooBarView8" = "%@發佈了一條動態"; +"XPMonentsTooBarView1" = "舉報動態或用戶"; +"XPMonentsTooBarView2" = "好友"; +"XPMonentsTooBarView3" = "朋友圈"; +"XPMonentsTooBarView4" = "微信好友"; +"XPMonentsTooBarView5" = "QQ好友"; +"XPMonentsTooBarView6" = "QQ空間"; +"XPMonentsTooBarView7" = "%@發佈了一條動態"; +"XPMonentsTooBarView8" = "屏蔽動態"; "XPMonentPublishSuccessView0" = "審核中"; "XPMonentPublishSuccessView1" = "咻,收到小可愛的動態了呢~\n審核通過後小秘書會幫你發送並通知你哦"; @@ -2218,7 +2227,7 @@ "LoginVerifCodeViewController4" = "重新獲取"; "XPLoginViewController11" = "同意隱私政策和用戶協議後,才可以註冊登錄哦~"; -"XPMonentsMineViewController2" = "刪除後不可恢複\n確定刪除該動態嗎?"; + "PKLoginViewController1" = "同意隱私政策和用戶協議後,才可以註冊登錄哦~";