This commit is contained in:
2026-01-28 18:15:58 +08:00
parent 9a54a2ae6c
commit 93a20cd92a

View File

@@ -9,12 +9,18 @@
#import "AiVM.h" #import "AiVM.h"
#import "KBChattedCompanionModel.h" #import "KBChattedCompanionModel.h"
#import "KBHUD.h" #import "KBHUD.h"
#import <Masonry/Masonry.h>
@interface KBAIMessageChatingVC () @interface KBAIMessageChatingVC ()
@property (nonatomic, strong) AiVM *viewModel; @property (nonatomic, strong) AiVM *viewModel;
@property (nonatomic, strong) NSMutableArray<KBChattedCompanionModel *> *chattedList; @property (nonatomic, strong) NSMutableArray<KBChattedCompanionModel *> *chattedList;
///
@property (nonatomic, strong) UIButton *deleteButton;
/// indexPath
@property (nonatomic, strong) NSIndexPath *longPressIndexPath;
@end @end
@implementation KBAIMessageChatingVC @implementation KBAIMessageChatingVC
@@ -24,6 +30,138 @@
- (void)viewDidLoad { - (void)viewDidLoad {
self.listType = 1; // Chatting self.listType = 1; // Chatting
[super viewDidLoad]; [super viewDidLoad];
//
[self setupLongPressGesture];
//
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
tapGesture.cancelsTouchesInView = NO; // cell
[self.tableView addGestureRecognizer:tapGesture];
}
#pragma mark -
- (void)setupLongPressGesture {
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 0.5; // 0.5
[self.tableView addGestureRecognizer:longPress];
}
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateBegan) {
CGPoint point = [gesture locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
if (indexPath) {
self.longPressIndexPath = indexPath;
//
[self showDeleteButtonAtPoint:point];
}
}
}
- (void)handleTapGesture:(UITapGestureRecognizer *)gesture {
//
if (self.deleteButton && !self.deleteButton.hidden) {
CGPoint point = [gesture locationInView:self.view];
CGPoint buttonPoint = [gesture locationInView:self.deleteButton];
//
if (!CGRectContainsPoint(self.deleteButton.bounds, buttonPoint)) {
[self hideDeleteButton];
}
}
}
- (void)showDeleteButtonAtPoint:(CGPoint)point {
//
[self hideDeleteButton];
//
if (!self.deleteButton) {
self.deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.deleteButton setTitle:@"删除此记录" forState:UIControlStateNormal];
[self.deleteButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
self.deleteButton.titleLabel.font = [UIFont systemFontOfSize:14];
self.deleteButton.backgroundColor = [UIColor colorWithRed:244/255.0 green:67/255.0 blue:54/255.0 alpha:1.0]; // #F44336
self.deleteButton.layer.cornerRadius = 6;
self.deleteButton.layer.masksToBounds = YES;
[self.deleteButton addTarget:self action:@selector(deleteButtonTapped) forControlEvents:UIControlEventTouchUpInside];
//
self.deleteButton.layer.shadowColor = [UIColor blackColor].CGColor;
self.deleteButton.layer.shadowOffset = CGSizeMake(0, 2);
self.deleteButton.layer.shadowOpacity = 0.3;
self.deleteButton.layer.shadowRadius = 4;
}
//
[self.view addSubview:self.deleteButton];
//
CGSize buttonSize = CGSizeMake(110, 40);
// tableView
CGPoint pointInView = [self.tableView convertPoint:point toView:self.view];
//
CGFloat buttonX = pointInView.x - buttonSize.width / 2;
CGFloat buttonY = pointInView.y - buttonSize.height - 10; // 10px
//
CGFloat margin = 10;
if (buttonX < margin) {
buttonX = margin;
} else if (buttonX + buttonSize.width > self.view.bounds.size.width - margin) {
buttonX = self.view.bounds.size.width - buttonSize.width - margin;
}
if (buttonY < KB_NAV_TOTAL_HEIGHT + margin) {
//
buttonY = pointInView.y + 10;
}
[self.deleteButton mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(buttonX);
make.top.equalTo(self.view).offset(buttonY);
make.width.mas_equalTo(buttonSize.width);
make.height.mas_equalTo(buttonSize.height);
}];
self.deleteButton.hidden = NO;
//
self.deleteButton.transform = CGAffineTransformMakeScale(0.3, 0.3);
self.deleteButton.alpha = 0;
[UIView animateWithDuration:0.2 delay:0 usingSpringWithDamping:0.7 initialSpringVelocity:0.5 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.deleteButton.transform = CGAffineTransformIdentity;
self.deleteButton.alpha = 1.0;
} completion:nil];
}
- (void)hideDeleteButton {
if (self.deleteButton) {
[UIView animateWithDuration:0.15 animations:^{
self.deleteButton.alpha = 0;
self.deleteButton.transform = CGAffineTransformMakeScale(0.8, 0.8);
} completion:^(BOOL finished) {
self.deleteButton.hidden = YES;
[self.deleteButton removeFromSuperview];
}];
}
self.longPressIndexPath = nil;
}
- (void)deleteButtonTapped {
if (self.longPressIndexPath) {
//
[self hideDeleteButton];
//
[self deleteItemAtIndexPath:self.longPressIndexPath];
}
} }
#pragma mark - 2 #pragma mark - 2