UILabel 支持copy功能

给UILabel扩充Copy功能

实现的原理:注册通知 添加手势识别 调用粘贴板

 具体实现 创建UICopyLabel类 继承UILabel

代码

UICopyLabel.h文件

#import <UIKit/UIKit.h>

@interface UICopyLabel : UILabel

@end

UICopyLabel.m文件

#import "UICopyLabel.h"

@implementation UICopyLabel

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
          [self attachTapHandlerAndAddObserver];
    }
    return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
         [self attachTapHandlerAndAddObserver];
    }
    return self;
}

-(void)attachTapHandlerAndAddObserver
{
    self.userInteractionEnabled = YES;  //用户交互的总开关
    UILongPressGestureRecognizer *touch = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [self addGestureRecognizer:touch];
    self.exclusiveTouch = YES;
    [touch release];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cancelLabelBackgroundColor) name:UIMenuControllerDidHideMenuNotification object:nil];
}

-(BOOL)canBecomeFirstResponder
{
    return YES;
}

//还需要针对复制的操作覆盖两个方法:

// 可以响应的方法
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    self.backgroundColor = [UIColor clearColor];
    return (action == @selector(copy:));
}

//针对于响应方法的实现
-(void)copy:(id)sender
{
    UIPasteboard *pboard = [UIPasteboard generalPasteboard];
    pboard.string = self.text;
}

-(void)handleTap:(UIGestureRecognizer*) recognizer
{
    [self becomeFirstResponder];
    UIMenuItem *copyLink = [[[UIMenuItem alloc] initWithTitle:@"复制全部内容"
                                                      action:@selector(copy:)]autorelease];
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:copyLink, nil]];
    [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview];
    [[UIMenuController sharedMenuController] setMenuVisible:YES animated: YES];
    self.backgroundColor = [UIColor lightGrayColor];
}

-(void)cancelLabelBackgroundColor
{
   self.backgroundColor = [UIColor clearColor];
}

@end

  

使用:把你需要支持copy的UILabel换成UICopyLabel 就OK了

时间: 2024-11-07 15:38:07

UILabel 支持copy功能的相关文章

OC 中 的copy 功能 深复制 和 浅复制 的 区别

系统的类要是实现copy拷贝的功能,必须先签订拷贝NSCopying的协议,然后实现对应的方法 在.h文件中得@interface Boy : NSObject 的后面需要签订拷贝NSCopying的协议 例子: 在.h文件中 @interface Boy : NSObject<NSCopying> 1. Boy类使用copy的方法 例子: Boy *boy =[Boy boyWithName:@"zhangyangyang" hobby:@"wan"]

手机支持USB功能、驱动文件对应关系

手机支持USB功能: 1.UMS(USB MASS Stronge) : 连接PC作为存储盘使用 2.ADB : 用于调试 3.MTP :连接PC作为存储盘使用(win XP需要安装WMP10 以上 win7以上自动包含有) 4.PTP : 类似于相机导入功能 5.RNDIS : 虚拟网卡 (PC通过手机网络上网等)  驱动文件对应关系:   1.android_winusb.inf ---> ADB功能   2.cdc_acm.inf ---> USB串口功能 3.tetherxp.inf

ORACLE异常:RETURNING 子句不支持的功能

获取序列ID时出现的异常,检查oracle数据库表ID字段类型是否为NUMBER类型.如果是long修改为number即可. 有关number类型:http://www.blogjava.net/caojianhua/archive/2011/01/24/343461.html 严重: null java.sql.SQLException: ORA-22816: RETURNING 子句不支持的功能 at oracle.jdbc.driver.SQLStateMapping.newSQLExce

TD-LTE中S1接口不支持的功能有哪些

http://www.mscbsc.com/askpro/response-316483.html wwwmscbsccom 的答案 这个是选择题吧,楼主应该把题目给全啊,一般介绍的有支持的功能,可以根据至此回的功能进行排除定义S1接口是LTE eNB(基站)与 EPC(分组核心网)之间的通讯接口. 含义LTE相对于3G网络,其最大特点是网络扁平化,引入了S1和X2接口.位于演进基站和移动性管理实体/服务网关间的S1接口,将SAE/LTE演进系统划分为无线接入网和核心网.网络架构主要由演进型No

java实现cmd的copy功能

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Copy {     public static voi

检查android设备是否支持某些功能

我们在开发APP的时候,应用程序可能需要设备支持某些功能才能保证应用程序的运行.例如需要支持电话,NFC.陀螺仪等等. 我们可以使用PackageManager对象的hasSystemFeature方法来检查当前设备是否支持某些功能. 第一种方法: 使用代码检查设备是否支持某些功能.这种方法比较好.因为不论app来自哪里.都能准确的判断设备是否支持应用所需的功能. 代码: PackageManager pm = getPackageManager(); // 获取是否支持电话 boolean t

让支付更便捷 iPhone 6领衔支持NFC功能的旗舰手机

& NBSP ; < / P> 苹果iPhone6 ??< / p> 激光聚焦,点击查看LG G3 < / p> LG G3是今年的旗舰手机的最新版本,该机机身依旧采用延续之前的G2背面按键设计.屏幕有很高的比例,再加上2K分辨率的显示屏幕,让用户有更好的视觉体验. LG电子的G3与主流旗舰配置,枭龙801 + 3GB的超大内存,整机运行流畅.机身背面有采用弧形设计,更加贴合手掌,使用起来更加舒适. < / p> 预计,苹果iPhone6??年-ol

支持HCE功能的NFC手机(Android)、 支持NFC功能的手机大全(安卓、微软、塞班、苹果)

支持HCE功能的Android手机需要满足如下条件: 1.支持NFC功能 2.操作系统是Android 3.Android版本4.4 如果满足条件1.2,但是通过刷机满足条件3也成立. 说明:对于NFC发烧友,如果囊中羞涩,不妨购买二手手机(刷机满足要求的二手手机更实惠)发烧.淘宝上价廉物美的很多! HCE(Host-based Card Emulation)是一个模拟智能卡的软件,在Android中就是一个apk.HCE的特点是模拟智能IC卡(ISO 7816-4),可用于金融和行业应用,HC

[Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能

问题: 运行Websphere Messager Broker 样本时 Database节点访问数据报错, [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能. 解决方法: 于是打开 控制面板 -> 管理工具->数据源ODBC->选中数据源->配置->高级-> 把Enable SQLDescribeParm 和 Procedure Return results的复选框勾上即可. 重启broker, 问题解决.