最近一直没有更新简书是因为在开发和测试阶段,有任务,没有进行学习,不过在做任务的时候也遇到了一些技术点,在这里总结一下。
今天遇到一个需求是一个Label上的文字可以进行复制,众所周知,我们的Label上边的文字是不易复制的,那我们怎么办?查找了一下资料,发现可以通过自定义Label的方式进行实现。
参考资料:传送门
在iOS中下面三个控件,自身就有复制-粘贴的功能:
1、UITextView
2、UITextField
3、UIWebView
UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。
1、UIPasteboard:我们可以向其中写入数据,也可以读取数据
2、UIMenuController:显示一个快捷菜单,用来展示复制、剪贴、粘贴等选择的项。
3、UIResponder中的 canPerformAction:withSender:用于控制哪些命令显示在快捷菜单中。
4、当快捷菜单上的命令点击的时候,UIResponderStandardEditActions将会被调用。
下面这些项能被放置到剪贴板中
1、UIPasteboardTypeListString — 字符串数组, 包含kUTTypeUTF8PlainText
2、UIPasteboardTypeListURL — URL数组,包含kUTTypeURL
3、UIPasteboardTypeListImage — 图形数组, 包含kUTTypePNG 和kUTTypeJPEG
4、UIPasteboardTypeListColor — 颜色数组
剪贴板的类型分为两种:
系统级:使用UIPasteboardNameGeneral和UIPasteboardNameFind,系统级应用程序关闭,或者卸载的数据不会丢失。
应用程序级:通过设置,可以让数据在应用程序关闭之后仍然保存在剪贴板中,但是应用程序卸载之后数据就会失去。我们可用通过pasteboardWithName:create:来创建。
下边我们就跟随上边传送门的资料,一步一步的实现自定义可以复制的Label。首先我们新建一个继承自UILabel的自定义Label。下边的图是.h文件里面的东西。
可以看出我们设置的枚举值里面是有两个:复制粘贴功能、只有复制功能。
下边是.m文件:
至此,自定义结束。后边是如何使用该自定义的Label。
看到上图,我们只是引入了头文件,然后和创建平时的Label一样设置,设置labelType的时候需要选择一下是两个功能里面的哪种即可。
通过这个自定义我们就实现了Label里面的内容可以进行复制的功能。
最后,哪里不对的地方可以给我留言,我会及时改进的,谢谢大家。