UIMenuController,复制UILabel上的文字

来源:互联网 发布:部落冲突龙升级数据 编辑:程序博客网 时间:2024/05/18 15:08

有时候需要需要复制UILabel上的textUIImageView上的image,但是UILabelUIImageView默认是不响应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
原创粉丝点击