From d8d5bdc3ae95101bc5ad480b96e59f4c79d96efb Mon Sep 17 00:00:00 2001 From: CodeST <694468528@qq.com> Date: Wed, 28 Jan 2026 13:55:11 +0800 Subject: [PATCH] 1 --- .../comment_close_icon.imageset/Contents.json | 22 ++++ .../comment_close_icon@2x.png | Bin 0 -> 1360 bytes .../comment_close_icon@3x.png | Bin 0 -> 2606 bytes keyBoard/Class/AiTalk/V/KBAICommentView.m | 101 +++++++++++++++--- 4 files changed, 110 insertions(+), 13 deletions(-) create mode 100644 keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/Contents.json create mode 100644 keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/comment_close_icon@2x.png create mode 100644 keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/comment_close_icon@3x.png diff --git a/keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/Contents.json b/keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/Contents.json new file mode 100644 index 0000000..91aa35a --- /dev/null +++ b/keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "comment_close_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "comment_close_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/comment_close_icon@2x.png b/keyBoard/Assets.xcassets/AI/comment_close_icon.imageset/comment_close_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8f888172b790fdb600088cd196f097f5616eb236 GIT binary patch literal 1360 zcmV-W1+V&vP)Wlwcq*fe0!Tq>^$w<&d!@R^LggI zdGFa!n{8oX=G2Ni|8Z$4e{*?pcCA>L+bR|EzPmVER{kI5*HnHJI8P#iR5Q>cqY-}Aq76eLN~I~|8S)+cm7a!gCG`=>wec+T$=k<$SnI|rPq#A z-m=st-{Xbh;)>dY?W&OmrYRtI{->8Sa&m#0KY_lc0I!Iil^3;{m6N~0M`W>6%bYc@*7E?;}7QPimqhqG6IAeA;i~@CpF2b_awYt2Pi}R zAF80IRd}`k0TExyu*uVYOVB4FSx%=?S5<4gq#>M}sZ z>3d;C!EB8=&b1vv6B)-VP9Jhs4A}e3OP$%bp$ux30w#J#i{*@~72JZ-^i?Be$09P6 z`g_b#FqoUgrTjP8_mb?RzeBMY2_;(Q5F}AEP>7Tr2QWVGMFwE9;cGuK)1>WBdIO8` zrP9_u6@-;TkpigNG+8jjJdSi&Ac;IvuSpwo$_}t$$9F5fX{2h>gvbC)k{$GetS=#X z#Sn2PJw-bJHI;UBqT4xB3#MJOOnky<3aSUE#E=rz9XWy^_*X@To_6h6eVu~=Quf$d zw4uXyBCoYbGV7NS9jrXe8}KLznKp`Ny)W4@8m2!XY>N~O90LHrpd27o2cWhm^sl|! zmQ7VwERT$aYeV_yQ9gR(CzcO_JB?siYm_hH_yMSEJ6Qez6>F#2@kVIFWK-!P0DzLx zq+85%ZJH1nfT@nvW!?xXZBo@pCE7P!G`lxEP1rdDFtPd#=_58b677?$0*iqnllhXgwGOFF;eM5o?gfBR z_4wn2Nf8R8rf&wv3YPG5($>np9uB8fW$&VhV}*WHC%5v=o<7{KnE1&L|I8z#_c=Az zuhi<<^y$G5P>3P~hAEtkO+m92p@WV}zY_S9j#hg$xfdZY14HlLOS6f>hVPp2woVO{ zm7Z3g^;&-R!q}3Uh@NVM@a3EB&vb%U%K&7@OvPRGS?i+?5H?7^T%ORpZyr@TV(mz< z>6QPRfX`S!=x{E6@RwIEJDP%Oq?AWjL`T7EU0RkM&w;PVXw6SugsdEj9&f#c{94&j zz431v-ByO-qnXX7fS`y_qB1kdn|i9;gbWm$g5;IBQ3P; z_O0uxe5`W<*PTH5ZOG6E9q8tC%zok3uH@%`00030|I3y*Hvj+t21!IgR09A-txBVg SL0FFf0000mZr9nn7Z27(xizJ z+tAQND79FNRdgB!o!v2@yMtwCgqB*ZfJU^oQ8#p%+BB29m?`@ z&%1x;oO`~x=bn4-8wF*0wr<_({#$hC^hh)^E7tSE(pY!rhFG*K%=wXM_w)U+p3XE= zD%KPJKxpqvFLZI=hIn`Q#{Dd_Z(nC+H2PClnaqI+1B-TrKGoaP)i(R8D>e?0D?H6G z4g;uNfY1R%Eu3HNL2U*btTD0SI12!0xi!_qeI11OT$=Q^FhvoMG4~ho?yi;5$g{JE z2w?(`nt&|Cd&0N6{ZqmSv=tHWLcsZK>{O>ZS+0Vq1`zKCq%9tw_r+KDMml!y-X3tO z%i?zo?9ic*r?;nbNvx;ybpm`60jgQqbf&T-0+_~%zQQy1P=&kd?S0+h*6{#z1Z-bV z=iJl(_CLY{Kg0BOrVE{BA;MD??#kcCy1TA*GFVB#LZOfreR)?qGlvjy4bPHK21yyZ zWEoWMwzOeX0N@IC(IVOtCH#N#3V6;=LQH~>7%oS$PFO>QOeV6bHumxtMbTyS&nK8*1uNMDSWdEF0~)vR9-W@9wPiX|4zCprri* z1_e=XlG8Cbm|Ug^J7gO&71&-Gz``7D45S}$e@67<`eaTsk!Y>hZZ|Rm*z_sTz@5!Z zmsUbtRT+R~V0%V^31S8KOP*fd5N#ZnKoJ3aK=32GscNKxRROh@BjD$y?qFf331BZP z{u$HTe7@5i$U??LWF!s!m_hI~0PW|#6cd!HFHOemSa*1}$OxIh_?qx(RyNw`F7ZU+ zQd)27#9(Xf!j_+Skm?!SPL?$d66F?gn^hdmGujvwhwnXJ4eIL~T2>}8y_gyIFhK^N zG%)3DL%7%4xJ_U_pRbnr`JTjY2Z@2a6KrccD7qG~M-^c=Y+JEbbd_xNX3Pa5DnzH z|`Ak6lIs!g-KzznIT0U8v5x zCC?P=c!RV=hWj0ihCfjiz>q??6GlJ*KQabq8L40!!c?W{*YGc{=4D8Yw^E8*GN@ec zC!i7rY~i7=XPR(QhWdsAg|jEDNfaRRk3@ytGAsItn7Chp@Nqy~%5^u>gp+~B)ohG0 zXTq9B6clsIWLET(nG*M7aXH471r+N7B>b#$x;Vl1KjQ1+Za_jr6f zPNrs$=M?fL9v~v~}x0Fph?V@|xh=UeSIdhfLjele-EVei;{%k%rQm!q% zNgP^i2eq5elhgcDo(;GwJ0)mX@(UI$c^`c#z97mcDG!xVA%(9ZQ)q@=ZV;0 z$?9mlrj*kD!VzlB0=Jlo=0r)JiAc8l$xMm+abLX&=)58~gS$SE<(B5P#dF>*&$Bx# z2^Ria>#xcS2?6!GGw~5_21S6IwSZb_kA4D5v)pflbxc;oEycCR$duM_2t2-1O24ds z00IAQmnnI{Qu>gQ7<{m%rs-o#UZS7f{iHpYKK@3b@ysnHfP!wBOSVuOZ!rh@`c9uv z)z$4OgRqwk_%D;0N?x#MXylzQ^@VYTqoCf5fe~F-A@>EQI=aqL!k=(2>OL{tPb7?{fWfzK9Mki z1)JNBv7*h=;Eb@=P3}MTc84Ez>8_Wp=;uraut%chmf={mv%_<_e+M@%0*4PO*nZvO z(AuwZcYFoBY__Aj&dl6X-+kor}9%ePP2&CLKN9rX*F4-gs;aUdAoo1}e` zQi2H9*EKZ%Dcim=z=R(0?J2P@n{omZrs~$#!Q}AZ{k*^ZmZv*0Spo&ymT;r?gxFTy z*fx4v;`WS`7npF##;p=s2mjA|H`fzP7d3HMKVulw;WY-=iEV|9DF{piYnqxq{_x}g z&l;`cdLPq8O4QH$?2nJU*SERQOj*Vi1tyGqsMO~-wEh|iZsuR@878^vNY@1?0^lu( zwi}?9)CXHPf~45n)U#<{gXisaBijv2N}M4@ZZMrfA)9hFKqeJ!p3D!*^f%* zASJvU1G99>x52t#%Y(_`L_GrD&cHq)$ literal 0 HcmV?d00001 diff --git a/keyBoard/Class/AiTalk/V/KBAICommentView.m b/keyBoard/Class/AiTalk/V/KBAICommentView.m index 2e52175..8fc8128 100644 --- a/keyBoard/Class/AiTalk/V/KBAICommentView.m +++ b/keyBoard/Class/AiTalk/V/KBAICommentView.m @@ -99,7 +99,7 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter"; [self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.headerView).offset(-16); make.centerY.equalTo(self.headerView); - make.width.height.mas_equalTo(30); + make.width.height.mas_equalTo(25); }]; [self.inputView mas_makeConstraints:^(MASConstraintMaker *make) { @@ -274,11 +274,49 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter"; __weak typeof(self) weakSelf = self; cell.onLikeAction = ^{ - // TODO: 处理点赞逻辑 - reply.isLiked = !reply.isLiked; - reply.likeCount += reply.isLiked ? 1 : -1; - [weakSelf.tableView reloadRowsAtIndexPaths:@[ indexPath ] - withRowAnimation:UITableViewRowAnimationNone]; + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + // 获取评论 ID(需要转换为 NSInteger) + NSInteger commentId = [reply.replyId integerValue]; + + // 调用点赞接口 + [strongSelf.aiVM likeCommentWithCommentId:commentId completion:^(KBCommentLikeResponse * _Nullable response, NSError * _Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + NSLog(@"[KBAICommentView] 二级评论点赞失败:%@", error.localizedDescription); + // TODO: 显示错误提示 + return; + } + + if (response && response.code == 0) { + // data = true: 点赞成功,data = false: 取消点赞成功 + BOOL isNowLiked = response.data; + + // 更新模型状态 + if (isNowLiked) { + // 点赞成功:喜欢数+1 + reply.isLiked = YES; + reply.likeCount = MAX(0, reply.likeCount + 1); + NSLog(@"[KBAICommentView] 二级评论点赞成功,ID: %ld", (long)commentId); + } else { + // 取消点赞成功:喜欢数-1 + reply.isLiked = NO; + reply.likeCount = MAX(0, reply.likeCount - 1); + NSLog(@"[KBAICommentView] 二级评论取消点赞成功,ID: %ld", (long)commentId); + } + + // 刷新对应的行 + [strongSelf.tableView reloadRowsAtIndexPaths:@[ indexPath ] + withRowAnimation:UITableViewRowAnimationNone]; + } else { + NSLog(@"[KBAICommentView] 二级评论点赞失败:%@", response.message ?: @"未知错误"); + // TODO: 显示错误提示 + } + }); + }]; }; cell.onReplyAction = ^{ @@ -300,11 +338,49 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter"; __weak typeof(self) weakSelf = self; header.onLikeAction = ^{ - // TODO: 处理点赞逻辑 - comment.liked = !comment.liked; - comment.likeCount += comment.liked ? 1 : -1; - [weakSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] - withRowAnimation:UITableViewRowAnimationNone]; + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + // 获取评论 ID(需要转换为 NSInteger) + NSInteger commentId = [comment.commentId integerValue]; + + // 调用点赞接口 + [strongSelf.aiVM likeCommentWithCommentId:commentId completion:^(KBCommentLikeResponse * _Nullable response, NSError * _Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + NSLog(@"[KBAICommentView] 一级评论点赞失败:%@", error.localizedDescription); + // TODO: 显示错误提示 + return; + } + + if (response && response.code == 0) { + // data = true: 点赞成功,data = false: 取消点赞成功 + BOOL isNowLiked = response.data; + + // 更新模型状态 + if (isNowLiked) { + // 点赞成功:喜欢数+1 + comment.liked = YES; + comment.likeCount = MAX(0, comment.likeCount + 1); + NSLog(@"[KBAICommentView] 一级评论点赞成功,ID: %ld", (long)commentId); + } else { + // 取消点赞成功:喜欢数-1 + comment.liked = NO; + comment.likeCount = MAX(0, comment.likeCount - 1); + NSLog(@"[KBAICommentView] 一级评论取消点赞成功,ID: %ld", (long)commentId); + } + + // 刷新对应的 section + [strongSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] + withRowAnimation:UITableViewRowAnimationNone]; + } else { + NSLog(@"[KBAICommentView] 一级评论点赞失败:%@", response.message ?: @"未知错误"); + // TODO: 显示错误提示 + } + }); + }]; }; header.onReplyAction = ^{ @@ -497,9 +573,8 @@ static NSInteger const kRepliesLoadCount = 5; - (UIButton *)closeButton { if (!_closeButton) { _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_closeButton setImage:[UIImage systemImageNamed:@"xmark"] + [_closeButton setImage:[UIImage imageNamed:@"comment_close_icon"] forState:UIControlStateNormal]; - _closeButton.tintColor = [UIColor labelColor]; [_closeButton addTarget:self action:@selector(closeButtonTapped) forControlEvents:UIControlEventTouchUpInside];