Label--自定义可粘贴复制的Label
来源:互联网 发布:db2登录命令linux 编辑:程序博客网 时间:2024/05/03 22:07
在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,系统级应用程序关闭,或者卸载的数据不会丢失。
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:来创建。
新创建一个类:CopyLabel
CopyLabel.h文件
#import <UIKit/UIKit.h>typedef NS_ENUM(NSInteger,CopyLabelStatus) { COPY_PASTE_LABEL, //有复制和粘贴功能label COPY_LABEL //只有复制功能label};@interface CopyLabel : UILabel//创建Label时可根据不同的类型来实现不同的功能@property (nonatomic, assign) CopyLabelStatus labelType;@end
#import "CopyLabel.h"@implementation CopyLabel//通过正常创建的初始化方法,绑定事件- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self){ [self attachTapHandler]; } return self;}////通过xib文件创建的初始化方法,绑定事件-(void)awakeFromNib{ [super awakeFromNib]; [self attachTapHandler];}//为了能接收到事件(能成为第一响应者),我们需要覆盖一个方法:-(BOOL)canBecomeFirstResponder{ return YES;}// 可以响应的方法//此方法中只相应了复制和粘贴两个方法,也就是弹出的面板中只有复制和粘贴两个按钮。//其它方法都返回No代表禁止,面板内不会出现相应的按钮。-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{ switch (self.labelType) { case COPY_PASTE_LABEL: //允许复制操作、粘贴操作 if (action == @selector(paste:)) { return (action == @selector(paste:)); }else if (action == @selector(copy:)){ return (action == @selector(copy:)); } break; case COPY_LABEL: //只允许复制操作 return (action == @selector(copy:)); break; default: break; } //其它操作不允许 return NO;}//针对于响应方法的实现,点击copy按钮时调用此方法-(void)copy:(id)sender{ UIPasteboard *pboard = [UIPasteboard generalPasteboard]; pboard.string = self.text;}//针对于响应方法的实现,点击paste按钮时调用此方法-(void)paste:(id)sender{ UIPasteboard *pboard = [UIPasteboard generalPasteboard]; self.text = pboard.string;}//有了以上三个方法,我们就能处理copy和paste了,当然,在能接收到事件的情况下://UILabel默认是不接收事件的,我们需要自己添加touch事件-(void)attachTapHandler{ self.userInteractionEnabled = YES; //用户交互的总开关 UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [self addGestureRecognizer:longPress];}//接下来,我们需要处理这个tap,以便让菜单栏弹出来:-(void)handleTap:(UIGestureRecognizer*) recognizer{ //if判断是为了保证长按手势只执行一次 if (recognizer.state == UIGestureRecognizerStateBegan) { [self becomeFirstResponder]; [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated: YES]; }}//这样一来,一个可复制的UILabel就诞生了!它能处理接收点击、弹出菜单栏、处理copy,这是一个很普通的可复制控件。@end
0 0
- Label--自定义可粘贴复制的Label
- 可复制的label
- 可复制文字的Label
- JavaFX2 - 文本可复制的Label
- winform 可拖动的自定义Label控件
- 自定义可旋转的Label控件
- IOS 开发 可复制label
- 可以复制的label
- iOS开发中可复制文本的Label
- Label 的富文本 与 自定义Label
- Label--自定义可调整内边距的Label
- 自定义Label的高度
- 可设置行距的Label
- 自定义TextView 可复制粘贴
- 自定义Label
- 自定义自适应内容的Label
- 自定义Label的行间距
- 自定义可调整内边距的Label
- window.external的使用
- HDU 1213 How Many Tables(并查集,认识的朋友做一块)
- intellij idea maven 安装配置使用
- unity优化杂谈2
- nodejs npm安装‘包’失败或者安装‘包’过慢的解决办法和forever包的使用方式
- Label--自定义可粘贴复制的Label
- 2134数据结构实验之栈四:括号匹配
- 时间复杂度
- Tomcat中更改网站根目录和默认页的配置方法
- Hibernate学习笔记之Session-API实现CRUD以及get&load&merge方法
- 欢迎使用CSDN-markdown编辑器
- EntityFramework预热
- C语言 作业二 菜单专题
- 将控制器View加到另外一个控制器的View上,没有数据以及事件不可触发的原因