UIMenuController,复制UILabel上的文字
来源:互联网 发布:部落冲突龙升级数据 编辑:程序博客网 时间:2024/05/18 15:08
有时候需要需要复制UILabel上的text、UIImageView上的image,但是UILabel和UIImageView默认是不响应Touch时间的,继而无法复制,于是我们需要重写这些类。
#import <UIKit/UIKit.h>@interface CopyLabel : UILabel@end
#import "CopyLabel.h"@implementation CopyLabel// 直接手写alloc初始化会调用此方法- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.userInteractionEnabled = YES; [self touchOnLabel]; } return self;}// 使用xib初始化,会调用此方法- (void)awakeFromNib { [super awakeFromNib]; self.userInteractionEnabled = YES; [self touchOnLabel];}- (void)touchOnLabel { UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)]; [self addGestureRecognizer:tap];}- (void)tapGesture:(UITapGestureRecognizer *)tap { [self becomeFirstResponder]; UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"复制文字" action:@selector(copyText:)]; [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:menuItem, nil]]; [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated: YES];}-(void)copyText:(nullable id)sender { UIPasteboard *paste = [UIPasteboard generalPasteboard]; paste.string = self.text;}#pragma mark - 重写以下两个方法- (BOOL)canBecomeFirstResponder { return YES;}/** 该方法如果返回为YES,那么menu会出现UIResponderStandardEditActions里所有的字段,如cut,copy,paste,select,selectAll等等。 当然,也可以不写这2句, UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyText:)]; [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:menuItem, nil]]; 它默认会出现copy这一项,需要实现copy:这个方法。注意:由于plist里面,Localization native development region字段是“en”,没有本地化,所以menu项显示的是“copy”,如果把该字段改成“China”,那么menu项会显示为“拷贝”,其他的menu项也会一律变为中文。 如果自定义其他menu项,就用上面的2句。**/- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (action == @selector(copyText:)) { return YES; } return NO;}/* 以下为系统默认的copy项实现的方法 *///- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {// // if (action == @selector(copy:)) {// return YES;// }// return NO;//}//////-(void)copy:(nullable id)sender {// // UIPasteboard *paste = [UIPasteboard generalPasteboard];// paste.string = self.text;//}
Demo下载地址:点击打开链接
以下为效果图:
0 0
- UIMenuController,复制UILabel上的文字
- UILabel上文字的自适应
- UIlabel,文字复制
- UILabel上的文字 单独改变 属性
- UILabel文字上对齐方法
- UILabel上展示不同颜色的文字(NSAttributedString)
- UILabel上展示不同颜色的文字(NSAttributedString)
- UILabel上展示不同样式的文字(NSAttributedString)
- UILabel上展示不同颜色的文字(NSAttributedString)
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- iOS UIMenuController的使用,对UILabel拷贝以及定制菜单
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- TextWatcher
- 9 Maven-继承和反应堆
- mysql数据库 复制一条记录到另外一张表中 本来为null的datatime字段,复制到另一张表中变为了0000-00-00 00:00:00
- 两只母鸡
- Kth Largest Element in an Array
- UIMenuController,复制UILabel上的文字
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
- 仿新浪微博放大缩小按钮
- 2016年了
- IOS之数据持久化
- setsockopt用法详解
- Spring Rmi远程方法调用 例子2
- lombok 使用
- js控制CSS样式属性语法对照表