美文网首页IOS收藏iOS 实用iOS
iOS 写一个自带复制功能的Label

iOS 写一个自带复制功能的Label

作者: Stark_Dylan | 来源:发表于2015-03-23 12:00 被阅读9863次

    在iOS8 之后, 我们发现UILabel不在为我们提供长按弹出复制等操作了, 我们来继承UILabel自己写一个带复制功能的按钮

    //
    //  XLabel.m
    //  SuperMan
    //
    //  Created by XueYulun on 15/3/23.
    //  Copyright (c) 2015年 X. All rights reserved.
    //
    
    #import "XLabel.h"
    
    @implementation XLabel
    
    -(BOOL)canBecomeFirstResponder {
        
        return YES;
    }
    
    // 可以响应的方法
    -(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
        
        return (action == @selector(copy:));
    }
    
    //针对于响应方法的实现
    -(void)copy:(id)sender {
        
        UIPasteboard *pboard = [UIPasteboard generalPasteboard];
        pboard.string = self.text;
    }
    
    //UILabel默认是不接收事件的,我们需要自己添加touch事件
    -(void)attachTapHandler {
        
        self.userInteractionEnabled = YES;
        UILongPressGestureRecognizer *touch = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [self addGestureRecognizer:touch];
    }
    
    //绑定事件
    - (id)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            
            [self attachTapHandler];
        }
        return self;
    }
    
    -(void)awakeFromNib {
        
        [super awakeFromNib];
        [self attachTapHandler];
    }
    
    -(void)handleTap:(UIGestureRecognizer*) recognizer {
        
        [self becomeFirstResponder];
        UIMenuItem *copyLink = [[UIMenuItem alloc] initWithTitle:@"复制"
                                                          action:@selector(copy:)];
        [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:copyLink, nil]];
        [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview];
        [[UIMenuController sharedMenuController] setMenuVisible:YES animated: YES];
    }
    
    @end
    
    

    相关文章

      网友评论

      • 16哥哥:那个copy:方法名字换一下就可以避免出现系统的copy出现了.
      • 童话镇里蜿蜒的河:能自由选择复制么?
      • 水户洋平_Psist:你好 大神 这样写出来的label 长按时出现复制 然后一直按着复制这两个字会一直闪烁 有研究过什么原因吗。
        菁欣陌陌:-(void)handleTap:(UIGestureRecognizer*) recognizer {
        if (g.state != UIGestureRecognizerStateBegan) return ; 加上这一句就不会闪烁了
      • 2084f2f3cbb8:运行起来,有点闪烁,求解决,谢谢
      • 代码:我这个长按label,弹出的小弹窗一直闪烁,这怎么回事,谢谢
        hmj1993:@Andy313 你闪烁解决了吗
        2084f2f3cbb8:@WildDylan 确实有闪烁,怎么解决,谢谢
        Stark_Dylan:@代码 是否是因为 [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview]; 出现了问题。 我不知道你具体的实现
      • a7e1fd5c77c1:我写了之后发现label是白色的,就是没有看见文字,但是点击复制又是有内容的,谁知道是为什么吗?
        a7e1fd5c77c1:@WildDylan 我设置了背景颜色,是可以看见label的,但是设置了文字颜色,还是没有看见文字。我是在view上面拉了控件,然后继承于自定义label的。是不是还要修改其他什么内容呢
        Stark_Dylan:@a7e1fd5c77c1 设个背景色看下
      • 白屏:有个很明显的问题,就是不能选择文字的范围!其实现在就只相当于一个button而已,点一下把label文本直接一下子都复制出来
        徐老茂:@白屏 请问这个范围选择文字功能做出来了吗?
        Stark_Dylan:@白屏 是哦... 我研究下 好久没看这个了
      • 菁欣陌陌:为什么我这边始终不走方法-(void)handleTap:(UILongPressGestureRecognizer *) recognizer,所以没有实现复制内容???
        菁欣陌陌:@WildDylan 是其他地方使之失效了:sweat_smile:
        Stark_Dylan:@菁欣陌陌 你好,我不知道你的真实使用场景是什么,也有可能你在外边禁用了交互,或者是手势冲突。 能提供更详细一点的代码么?
        651d03a50495:@菁欣陌陌 你解决了吗?
      • 让我走的潇洒一点:copy长度怎么自定义
      • ComputerPr:这个怎么解决啊?作者知道吗?
        Stark_Dylan:@ComputerPr 😋
        ComputerPr:@WildDylan 现在才看,已经解决了,只要不写copy方法就行了
        Stark_Dylan:@ComputerPr 文中的代码没有解决问题么?
      • Stark_Dylan:@碧野MAX 在HandleTap。 google一下会发现stackoverflow第一个解答就OK
        劉光軍_MVP:@WildDylan 能贴一下 或者私信我嘛?我公司网速打不开stackoverflow
        Stark_Dylan:@iremembeu 下边的代码解决问题
        劉光軍_MVP:@WildDylan 这个怎么解决的呢?求告知
      • 6fdb0c58ceca:整了之后出现两个Copy,一个是自定义的,一个是自带的,自带的怎么删除啊
        69deda1c8d86:@风雨啸青锋 你好 请问你解决了吗?
        Stark_Dylan:@bb83a6a76af4 :+1:
        风雨啸青锋:@碧野MAX 怎么删除的,弄出来 了么
      • 952625a28d0d:我是你的脑残粉,在张良之前

      本文标题:iOS 写一个自带复制功能的Label

      本文链接:https://www.haomeiwen.com/subject/hikgxttx.html