label的长按复制的功能
来源:互联网 发布:海口网站排名优化 编辑:程序博客网 时间:2024/05/22 06:36
经查询,系统中支持复制功能的控件有如下3种:UITextView,UITextField,UIWebView
所以要想用UILabel支持复制功能,如下图所示,则需要自定义
一,添加一个label的类别
//.h#import <UIKit/UIKit.h>@interface UILabel (Copy)@property (nonatomic,assign) BOOL isCopyable;@end//.m#import "UILabel+Copy.h"@implementation UILabel (Copy)- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return (action == @selector(copyText:));}- (void)attachTapHandler {// 使UILabel成为第一响应者 self.userInteractionEnabled = YES; UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [self addGestureRecognizer:longPress];}// 处理手势相应事件- (void)handleTap:(UIGestureRecognizer *)longPress { [self becomeFirstResponder]; //UIMenuController的要求,要显示UIMenuController对象的UIView必须是当前UIWindow的第一响应者 UIMenuItem *item = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyText:)]; [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:item]]; [[UIMenuController sharedMenuController] setTargetRect:CGRectMake(self.width/3+self.left, self.top+17, 100, 20) inView:self.superview]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];}// 复制时执行的方法- (void)copyText:(id)sender { //系统的粘贴板UIPasteboard UIPasteboard *pBoard = [UIPasteboard generalPasteboard]; // 有些时候只想取UILabel的text中的一部分 if (objc_getAssociatedObject(self, @"expectedText")) { pBoard.string = objc_getAssociatedObject(self, @"expectedText"); } else { // 因为有时候 label 中设置的是attributedText,而 UIPasteboard 的string只能接受 NSString 类型,所以要做相应的判断 if (self.text) { pBoard.string = self.text; } else { pBoard.string = self.attributedText.string; } }}- (BOOL)canBecomeFirstResponder { return [objc_getAssociatedObject(self, @selector(isCopyable)) boolValue];}- (void)setIsCopyable:(BOOL)number { objc_setAssociatedObject(self, @selector(isCopyable), [NSNumber numberWithBool:number], OBJC_ASSOCIATION_ASSIGN); [self attachTapHandler];}- (BOOL)isCopyable { return [objc_getAssociatedObject(self, @selector(isCopyable)) boolValue];}
二,方法的调用
_detilLab.isCopyable=YES;
0 0
- label的长按复制的功能
- Label长按复制
- 长按可以复制文字的Label (仿微信)
- iOS - 关于长按label复制文本的实现
- iOS开发:为Label添加长按复制功能
- 类似于长按文章,有复制,收藏的功能
- 可以复制的label
- 可复制的label
- Label--自定义可粘贴复制的Label
- 可复制文字的Label
- 解决:长按一条接收到的彩信,快捷菜单“选择性复制”功能错误
- Android开发TextView实现长按复制文本功能的方法
- Android开发TextView实现长按复制文本功能的方法
- Android开发TextView实现长按复制文本功能的方法
- 长按TextView实现复制功能
- TableViewCell实现长按复制功能
- TextView的长按复制(高仿微信文字复制粘贴)
- LABEL伪指令的功能
- node.js定时任务:node-schedule的使用【转】
- 关于计时器定时器的设计 时间轮的高效实现 linux hashed Hierarchical timing wheel
- 一步一步教你接入tinker 热修复
- 基于jquery.artZoom实现图片旋转
- Tkx笔记
- label的长按复制的功能
- 没有为扩展名.htm注册的生成提供程序,没有为扩展名.html注册的生成提供程序
- MySQL grant指令详解
- Gradle for Android应用
- mysql总结
- Kafka-0.10.1.0 简单安装部署
- Spring ioc
- Comparable与Comparator的比较
- Horizon 源码阅读(三)—— Horizon 用户登录流程