1、有以下控件已经支持UIMenuController
1. UITextFiled
2. UIWebView
3. UITextView
2、让其他控件支持UIMenuController
a) 自定义控件
b) 必须实现两个方法,方法如下:
// 使控件成为第一响应者
- (BOOL)canBecomeFirstResponder{
return YES;
}
// 控件能执行的方法比如(复制,粘贴...)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
return YES;
}
c) 实现各种操作方法,方法如下:
// 复制
-(void)copy:(UIMenuController *)menu{
// 将粘贴板上的内容复制给自己
UIPasteboard *paste = [UIPasteboard generalPasteboard];
self.text = paste.string;
}
// 剪切
-(void)cut:(UIMenuController *)menu{
[self copy:menu];
// 清空文字
self.text = nil;
}
d) 让控件成为第一响应者
// self指的是控件
[self becomeFirstResponder];
e) 显示UIMenuController
// 显示menuController
UIMenuController *menu = [UIMenuController sharedMenuController];
//[menu setTargetRect:self.frame inView:self.superView];可以用下面代替
//TargetRect:MenuController需要指向的矩形距离
//TargetView:targetRect会以它的左上角为坐标原点
[menu setTargetRect:self.bounds inView:self];
[menu setMenuVisible:YES animated:YES];
运行结果:
1. UITextFiled
2. UIWebView
3. UITextView
2、让其他控件支持UIMenuController
a) 自定义控件
b) 必须实现两个方法,方法如下:
// 使控件成为第一响应者
- (BOOL)canBecomeFirstResponder{
return YES;
}
// 控件能执行的方法比如(复制,粘贴...)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
return YES;
}
c) 实现各种操作方法,方法如下:
// 复制
-(void)copy:(UIMenuController *)menu{
// 将粘贴板上的内容复制给自己
UIPasteboard *paste = [UIPasteboard generalPasteboard];
self.text = paste.string;
}
// 剪切
-(void)cut:(UIMenuController *)menu{
[self copy:menu];
// 清空文字
self.text = nil;
}
d) 让控件成为第一响应者
// self指的是控件
[self becomeFirstResponder];
e) 显示UIMenuController
// 显示menuController
UIMenuController *menu = [UIMenuController sharedMenuController];
//[menu setTargetRect:self.frame inView:self.superView];可以用下面代替
//TargetRect:MenuController需要指向的矩形距离
//TargetView:targetRect会以它的左上角为坐标原点
[menu setTargetRect:self.bounds inView:self];
[menu setMenuVisible:YES animated:YES];
这里以UILabel为例,具体代码如下:
#import "CustomLabel.h"
@implementation CustomLabel
- (void)awakeFromNib{
[self createAttributes];
}
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self createAttributes];
}
return self;
}
-(void)createAttributes{
// 打开用户交互
self.userInteractionEnabled = YES;
// 添加手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelAction)];
[self addGestureRecognizer:tap];
}
// 使label能成为第一响应者
- (BOOL)canBecomeFirstResponder{
return YES;
}
// label能执行的方法比如(复制,粘贴...)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
if (action == @selector(copy:) || action == @selector(cut:) || action == @selector(paste:)) {
return YES;
}
return NO;
}
-(void)copy:(UIMenuController *)menu{
// 将粘贴板上的内容复制给自己
UIPasteboard *paste = [UIPasteboard generalPasteboard];
self.text = paste.string;
}
-(void)cut:(UIMenuController *)menu{
[self copy:menu];
// 清空文字
self.text = nil;
}
-(void)paste:(UIMenuController *)menu{
// 将自己的文字复制到粘贴板上
UIPasteboard *paste = [UIPasteboard generalPasteboard];
paste.string = self.text;
}
//设置menuController的作用矩形框
-(void)labelAction{
// label成为第一响应者
[self becomeFirstResponder];
// 显示menuController
UIMenuController *menu = [UIMenuController sharedMenuController];
//[menu setTargetRect:self.frame inView:self.superView];可以用下面代替
//TargetRect:MenuController需要指向的矩形距离
//TargetView:targetRect会以它的左上角为坐标原点
[menu setTargetRect:self.bounds inView:self];
[menu setMenuVisible:YES animated:YES];
}
@end
运行结果: