美文网首页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