当前位置: 首页 > news >正文

简单实现UIlabel可复制功能

144 

作者 Sunshine_tt 

在我们日常的开发中经常会遇到一些小需求,比如需要长按控件来拷贝控件中得内容.我们知道在iOS中有三个控件自身是支持拷贝,粘贴的,如:UITextField,UITextView,UIWebView
但是,有时候我们会遇到需要长按UIlabel,弹出“复制”item,来实现可复制。

首先UIKit中提供给我们几个类

在开始之前,我们需要自定义一个WINCopyLabel继承UILable

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) { [self pressAction]; } return self; } // 初始化设置 - (void)pressAction { self.userInteractionEnabled = YES; UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)]; longPress.minimumPressDuration = 1; [self addGestureRecognizer:longPress]; }
  1. UIResponder:通过这个类实现UILabel可以响应事件(我们知道UIlabel是不能成为响应者的,所以这里需要重写),控制需要响应的事件

      // 使label能够成为响应事件
      - (BOOL)canBecomeFirstResponder {
          return YES;
      }
      // 控制响应的方法 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return action == @selector(customCopy:); }
  2. UIPasteboard:该类支持写入和读取数据,类似剪贴板

     - (void)customCopy:(id)sender {
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        pasteboard.string = self.text; }
  3. UIMenuController:可以通过这个类实现在点击内容,或者长按内容时展示出复制、剪贴、粘贴等选择的项,每个选项都是一个UIMenuItem对象

    - (void)longPressAction:(UIGestureRecognizer *)recognizer {
        [self becomeFirstResponder];
        UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"拷贝" action:@selector(customCopy:)]; [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:copyItem, nil]]; [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; }

补充:

一、UIResponderStandardEditActions:这是苹果给NSObject写的一个分类,其中包含了我们常用的复制,粘贴,全选等方法

    - (void)cut:(nullable id)sender     NS_AVAILABLE_IOS(3_0); - (void)copy:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)paste:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)select:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)selectAll:(nullable id)sender NS_AVAILABLE_IOS(3_0); - (void)delete:(nullable id)sender NS_AVAILABLE_IOS(3_2);

当我们,选中弹出的item时,系统会调用上面对应的方法


F101CDB2-A373-40E5-ACF3-48C6B05EACB4.png

二、.以下是剪贴板中可以放置的内容(除了字符串,也可以拷贝图片,URL等)
1.UIPasteboardTypeListString 字符串数组, 包含kUTTypeUTF8PlainText
2.UIPasteboardTypeListURL URL数组,包含kUTTypeURL
3.UIPasteboardTypeListImage 图形数组, 包含kUTTypePNG 和kUTTypeJPEG
4.UIPasteboardTypeListColor 颜色数组

转载于:https://www.cnblogs.com/henusyj-1314/p/6373748.html

相关文章:

  • 大数据学习系列之五 ----- Hive整合HBase图文详解
  • REST开放接口生成文档工具之apidoc
  • 自建Maven仓库 - Artifactory
  • 微信管理
  • 推荐一个提升工作效率的小插件[intellij-postfix-templates]
  • 面试(1)
  • ios - 关于拖动手势简单应用场景
  • 第二课、GUI程序实例分析------------------狄泰软件学院
  • 第五课、Qt Creator 工程介绍------------------狄泰软件学院
  • PL/pgSQL RETURNS TABLE 例子
  • 贝塞尔曲线学习
  • 2007浙大复试上机考试题目2--统计字符
  • static作用(修饰函数、局部变量、全局变量)
  • 18 Issues in Current Deep Reinforcement Learning from ZhiHu
  • PC 微信扫码登陆
  • 深入了解以太坊
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HomeBrew常规使用教程
  • markdown编辑器简评
  • rc-form之最单纯情况
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redis 懒删除(lazy free)简史
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring Cloud Feign的两种使用姿势
  • 反思总结然后整装待发
  • 欢迎参加第二届中国游戏开发者大会
  • 基于 Babel 的 npm 包最小化设置
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 巧用 TypeScript (一)
  • 如何在 Tornado 中实现 Middleware
  • 深度解析利用ES6进行Promise封装总结
  • 微信小程序设置上一页数据
  • 我看到的前端
  • 用jquery写贪吃蛇
  • 优化 Vue 项目编译文件大小
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # 数据结构
  • $L^p$ 调和函数恒为零
  • (3)选择元素——(17)练习(Exercises)
  • (Forward) Music Player: From UI Proposal to Code
  • (十六)串口UART
  • (转)Google的Objective-C编码规范
  • (转)nsfocus-绿盟科技笔试题目
  • (转)scrum常见工具列表
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET NPOI导出Excel详解
  • .NET/C# 的字符串暂存池
  • .NET多线程执行函数
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • ??javascript里的变量问题
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ 转载 ] SharePoint 资料