Files
benmy--tlchat/TLChat/Modules/Chat/ChatViewController/ChatCommonViews/TLChatCellMenuView/TLChatCellMenuView.m
T
2026-07-13 12:35:01 +08:00

100 lines
2.7 KiB
Objective-C

//
// TLChatCellMenuView.m
// TLChat
//
// Created by 李伯坤 on 16/3/16.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLChatCellMenuView.h"
@interface TLChatCellMenuView ()
@property (nonatomic, strong) UIMenuController *menuController;
@end
@implementation TLChatCellMenuView
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setBackgroundColor:[UIColor clearColor]];
self.menuController = [UIMenuController sharedMenuController];
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss)];
[self addGestureRecognizer:tapGR];
}
return self;
}
- (void)showInView:(UIView *)view withMessageType:(TLMessageType)messageType rect:(CGRect)rect actionBlock:(void (^)(TLChatMenuItemType))actionBlock
{
_isShow = YES;
[self setFrame:view.bounds];
[view addSubview:self];
[self setActionBlcok:actionBlock];
[self setMessageType:messageType];
[self.menuController setTargetRect:rect inView:self];
[self becomeFirstResponder];
[self.menuController setMenuVisible:YES animated:YES];
}
- (void)setMessageType:(TLMessageType)messageType
{
UIMenuItem *copy = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyButtonDown:)];
UIMenuItem *transmit = [[UIMenuItem alloc] initWithTitle:@"转发" action:@selector(transmitButtonDown:)];
UIMenuItem *collect = [[UIMenuItem alloc] initWithTitle:@"收藏" action:@selector(collectButtonDown:)];
UIMenuItem *del = [[UIMenuItem alloc] initWithTitle:@"删除" action:@selector(deleteButtonDown:)];
[self.menuController setMenuItems:@[copy, transmit, collect, del]];
}
- (void)dismiss
{
_isShow = NO;
if (self.actionBlcok) {
self.actionBlcok(TLChatMenuItemTypeCancel);
}
[self.menuController setMenuVisible:NO animated:YES];
[self removeFromSuperview];
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
#pragma mark - Event Response -
- (void)copyButtonDown:(UIMenuController *)sender
{
[self p_clickedMenuItemType:TLChatMenuItemTypeCopy];
}
- (void)transmitButtonDown:(UIMenuController *)sender
{
[self p_clickedMenuItemType:TLChatMenuItemTypeCopy];
}
- (void)collectButtonDown:(UIMenuController *)sender
{
[self p_clickedMenuItemType:TLChatMenuItemTypeCopy];
}
- (void)deleteButtonDown:(UIMenuController *)sender
{
[self p_clickedMenuItemType:TLChatMenuItemTypeDelete];
}
#pragma mark - Private Methods -
- (void)p_clickedMenuItemType:(TLChatMenuItemType)type
{
_isShow = NO;
[self removeFromSuperview];
if (self.actionBlcok) {
self.actionBlcok(type);
}
}
@end