修改BUG

This commit is contained in:
2026-01-16 20:44:10 +08:00
parent 93489b09d9
commit 552387293c
4 changed files with 77 additions and 50 deletions

View File

@@ -69,8 +69,10 @@
}
case KBAIReplyFooterStateLoadMore: {
self.actionButton.hidden = NO;
NSInteger remaining = comment.totalReplyCount - comment.displayedReplies.count;
title = [NSString stringWithFormat:@"展开更多回复(%ld条", (long)remaining];
NSInteger remaining =
comment.totalReplyCount - comment.displayedReplies.count;
title =
[NSString stringWithFormat:@"展开更多回复(%ld条", (long)remaining];
[self.actionButton setImage:[UIImage systemImageNamed:@"chevron.down"]
forState:UIControlStateNormal];
break;
@@ -108,8 +110,8 @@
//
_actionButton.semanticContentAttribute =
UISemanticContentAttributeForceLeftToRight;
_actionButton.imageEdgeInsets = UIEdgeInsetsMake(0, 4, 0, -4);
_actionButton.titleEdgeInsets = UIEdgeInsetsMake(0, -4, 0, 4);
_actionButton.imageEdgeInsets = UIEdgeInsetsMake(0, -2, 0, 2);
_actionButton.titleEdgeInsets = UIEdgeInsetsMake(0, 2, 0, -2);
[_actionButton addTarget:self
action:@selector(actionButtonTapped)

View File

@@ -21,6 +21,9 @@ NS_ASSUME_NONNULL_BEGIN
/// 清空输入框
- (void)clearText;
/// 弹起键盘
- (void)showKeyboard;
@end
NS_ASSUME_NONNULL_END

View File

@@ -83,6 +83,10 @@
[self updateSendButtonState];
}
- (void)showKeyboard {
[self.textField becomeFirstResponder];
}
#pragma mark - Actions
- (void)sendButtonTapped {

View File

@@ -93,7 +93,8 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter";
[self.inputView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self);
make.height.mas_equalTo(50);
self.inputBottomConstraint = make.bottom.equalTo(self).offset(-KB_SafeAreaBottom());
self.inputBottomConstraint =
make.bottom.equalTo(self).offset(-KB_SafeAreaBottom());
}];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -148,7 +149,8 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter";
[self.inputBottomConstraint uninstall];
[self.inputView mas_updateConstraints:^(MASConstraintMaker *make) {
self.inputBottomConstraint = make.bottom.equalTo(self);
self.inputBottomConstraint =
make.bottom.equalTo(self).offset(-KB_SafeAreaBottom());
}];
[UIView animateWithDuration:duration
@@ -186,20 +188,22 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter";
NSArray *commentsArray = json[@"comments"];
[self.comments removeAllObjects];
// tableView
CGFloat tableWidth = self.tableView.bounds.size.width;
if (tableWidth <= 0) {
tableWidth = [UIScreen mainScreen].bounds.size.width;
}
for (NSDictionary *dict in commentsArray) {
KBAICommentModel *comment = [KBAICommentModel mj_objectWithKeyValues:dict];
// Header
comment.cachedHeaderHeight = [comment calculateHeaderHeightWithMaxWidth:tableWidth];
comment.cachedHeaderHeight =
[comment calculateHeaderHeightWithMaxWidth:tableWidth];
// Reply
for (KBAIReplyModel *reply in comment.replies) {
reply.cachedCellHeight = [reply calculateCellHeightWithMaxWidth:tableWidth];
reply.cachedCellHeight =
[reply calculateCellHeightWithMaxWidth:tableWidth];
}
[self.comments addObject:comment];
}
@@ -250,7 +254,7 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter";
[weakSelf.tableView reloadRowsAtIndexPaths:@[ indexPath ]
withRowAnimation:UITableViewRowAnimationNone];
};
cell.onReplyAction = ^{
[weakSelf setReplyToComment:comment reply:reply];
};
@@ -276,7 +280,7 @@ static NSString *const kCommentFooterIdentifier = @"CommentFooter";
[weakSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:section]
withRowAnimation:UITableViewRowAnimationNone];
};
header.onReplyAction = ^{
[weakSelf setReplyToComment:comment reply:nil];
};
@@ -357,17 +361,18 @@ static NSInteger const kRepliesLoadCount = 5;
- (void)loadMoreRepliesForSection:(NSInteger)section {
KBAICommentModel *comment = self.comments[section];
NSInteger currentCount = comment.displayedReplies.count;
//
[comment loadMoreReplies:kRepliesLoadCount];
//
NSInteger newCount = comment.displayedReplies.count;
NSMutableArray *insertIndexPaths = [NSMutableArray array];
for (NSInteger i = currentCount; i < newCount; i++) {
[insertIndexPaths addObject:[NSIndexPath indexPathForRow:i inSection:section]];
[insertIndexPaths addObject:[NSIndexPath indexPathForRow:i
inSection:section]];
}
// Header
[self.tableView beginUpdates];
if (insertIndexPaths.count > 0) {
@@ -375,7 +380,7 @@ static NSInteger const kRepliesLoadCount = 5;
withRowAnimation:UITableViewRowAnimationAutomatic];
}
[self.tableView endUpdates];
// Footer
KBAICommentFooterView *footerView =
(KBAICommentFooterView *)[self.tableView footerViewForSection:section];
@@ -387,16 +392,17 @@ static NSInteger const kRepliesLoadCount = 5;
- (void)collapseRepliesForSection:(NSInteger)section {
KBAICommentModel *comment = self.comments[section];
NSInteger rowCount = comment.displayedReplies.count;
//
NSMutableArray *deleteIndexPaths = [NSMutableArray array];
for (NSInteger i = 0; i < rowCount; i++) {
[deleteIndexPaths addObject:[NSIndexPath indexPathForRow:i inSection:section]];
[deleteIndexPaths addObject:[NSIndexPath indexPathForRow:i
inSection:section]];
}
//
[comment collapseReplies];
// Header
[self.tableView beginUpdates];
if (deleteIndexPaths.count > 0) {
@@ -404,7 +410,7 @@ static NSInteger const kRepliesLoadCount = 5;
withRowAnimation:UITableViewRowAnimationAutomatic];
}
[self.tableView endUpdates];
// Footer
KBAICommentFooterView *footerView =
(KBAICommentFooterView *)[self.tableView footerViewForSection:section];
@@ -458,7 +464,7 @@ static NSInteger const kRepliesLoadCount = 5;
- (BaseTableView *)tableView {
if (!_tableView) {
_tableView = [[BaseTableView alloc] initWithFrame:CGRectZero
style:UITableViewStyleGrouped];
style:UITableViewStyleGrouped];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = [UIColor whiteColor];
@@ -496,20 +502,26 @@ static NSInteger const kRepliesLoadCount = 5;
#pragma mark - Reply
- (void)setReplyToComment:(KBAICommentModel *)comment reply:(KBAIReplyModel *)reply {
- (void)setReplyToComment:(KBAICommentModel *)comment
reply:(KBAIReplyModel *)reply {
self.replyToComment = comment;
self.replyToReply = reply;
if (reply) {
//
self.inputView.placeholder = [NSString stringWithFormat:@"回复 @%@", reply.userName];
self.inputView.placeholder =
[NSString stringWithFormat:@"回复 @%@", reply.userName];
} else if (comment) {
//
self.inputView.placeholder = [NSString stringWithFormat:@"回复 @%@", comment.userName];
self.inputView.placeholder =
[NSString stringWithFormat:@"回复 @%@", comment.userName];
} else {
//
self.inputView.placeholder = @"说点什么...";
}
//
[self.inputView showKeyboard];
}
- (void)clearReplyTarget {
@@ -521,13 +533,14 @@ static NSInteger const kRepliesLoadCount = 5;
#pragma mark - Send Comment
- (void)sendCommentWithText:(NSString *)text {
if (text.length == 0) return;
if (text.length == 0)
return;
CGFloat tableWidth = self.tableView.bounds.size.width;
if (tableWidth <= 0) {
tableWidth = [UIScreen mainScreen].bounds.size.width;
}
if (self.replyToComment) {
//
[self sendReplyWithText:text tableWidth:tableWidth];
@@ -535,7 +548,7 @@ static NSInteger const kRepliesLoadCount = 5;
//
[self sendNewCommentWithText:text tableWidth:tableWidth];
}
//
[self.inputView clearText];
[self clearReplyTarget];
@@ -553,27 +566,29 @@ static NSInteger const kRepliesLoadCount = 5;
newComment.isLiked = NO;
newComment.createTime = [[NSDate date] timeIntervalSince1970];
newComment.replies = @[];
//
newComment.cachedHeaderHeight = [newComment calculateHeaderHeightWithMaxWidth:tableWidth];
newComment.cachedHeaderHeight =
[newComment calculateHeaderHeightWithMaxWidth:tableWidth];
//
[self.comments insertObject:newComment atIndex:0];
self.totalCommentCount++;
[self updateTitle];
// section
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:0]
withRowAnimation:UITableViewRowAnimationAutomatic];
//
[self.tableView setContentOffset:CGPointZero animated:YES];
}
- (void)sendReplyWithText:(NSString *)text tableWidth:(CGFloat)tableWidth {
KBAICommentModel *comment = self.replyToComment;
if (!comment) return;
if (!comment)
return;
//
KBAIReplyModel *newReply = [[KBAIReplyModel alloc] init];
newReply.replyId = [NSUUID UUID].UUIDString;
@@ -584,41 +599,44 @@ static NSInteger const kRepliesLoadCount = 5;
newReply.likeCount = 0;
newReply.isLiked = NO;
newReply.createTime = [[NSDate date] timeIntervalSince1970];
//
if (self.replyToReply) {
newReply.replyToUserName = self.replyToReply.userName;
}
//
newReply.cachedCellHeight = [newReply calculateCellHeightWithMaxWidth:tableWidth];
newReply.cachedCellHeight =
[newReply calculateCellHeightWithMaxWidth:tableWidth];
// replies
NSMutableArray *newReplies = [NSMutableArray arrayWithArray:comment.replies];
[newReplies addObject:newReply];
comment.replies = newReplies;
comment.totalReplyCount = newReplies.count;
// section
NSInteger section = [self.comments indexOfObject:comment];
if (section == NSNotFound) return;
if (section == NSNotFound)
return;
// displayedReplies
if (comment.isRepliesExpanded) {
NSInteger newRowIndex = comment.displayedReplies.count;
[comment.displayedReplies addObject:newReply];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:section];
[self.tableView insertRowsAtIndexPaths:@[indexPath]
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex
inSection:section];
[self.tableView insertRowsAtIndexPaths:@[ indexPath ]
withRowAnimation:UITableViewRowAnimationAutomatic];
// Footer
KBAICommentFooterView *footerView =
(KBAICommentFooterView *)[self.tableView footerViewForSection:section];
if (footerView) {
[footerView configureWithComment:comment];
}
//
[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionBottom