支持UIPasteboard原生控件只有UITextField、UITextView、UIWebView这三个,如果想自定一个控件使用UIPasteboard,需要在定义的时候重载以下两个方法
- (Bool)canBecomeFirstResponder //能成为第一响应者
-(Bool)canPerformAction:(SEL)action withSender:(id)sender方法 //删选出需要的功能
第一种用法 自定义View实现UIPasteboard功能
自定义view来实现复制粘贴等功能,如复制图片
第一步,重载以下方法
-(BOOL)canBecomeFirstResponder{
return YES;
}
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
// NSArray* methodNameArr = @[@"copy:",@"cut:",@"select:",@"selectAll:",@"paste:"]; 需要实现的功能,在这里只实现了复制和粘贴
NSArray* methodNameArr = @[@"copy:",@"paste:"];
if ([methodNameArr containsObject:NSStringFromSelector(action)]) {
return YES;
}
return [super canPerformAction:action withSender:sender];
}
第二步 在需要实现复制或粘贴处实现弹出方法,比如可以在一个view上加手势
//手势响应方法
- (void)pressClick:(UILongPressGestureRecognizer *)recognizer{
if(recognizer.state == UIGestureRecognizerStateBegan){
[self becomeFirstResponder];
UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setTargetRect:recognizer.view.frame inView:self];
[menuController setMenuVisible:YES animated:YES];
}
}
第三步 实现复制粘贴等方法
//如果允许这些功能,就得实现方法,不然会崩溃
-(void)copy:(id)sender{
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setImage:self.imageView1.image];
}
//粘贴
-(void)paste:(id)sender{
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
self.imageView2.image = [pasteboard image];
}
这样就完成了。
第二种用法 已支持的View实现UIPasteboard功能
支持UIPasteboard原生控件只有UITextField、UITextView、UIWebView这三个,这三个控件使用方法不需要写啥代码,系统已经做好了。但如果是想在这上面再封装使用,就得重复第一种使用方法的代码
第三种用法 屏蔽系统已支持的view的UIPasteboard功能
像有些场合,比如输入金额等场合,就不应该允许可以复制粘贴,有可能粘贴为-100元,那这种就会把钱倒出来了,所以呢,要能屏蔽该功能
只需在该类写个分类实现以下方法,如果只想屏蔽当时这个view的功能,那么就自定义view实现以下方法
#pragma mark - 禁用所有长按文本框操作
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
return NO;
}