41

iOS 封装一个带复制功能的UILabel

 5 years ago
source link: http://www.cocoachina.com/ios/20180824/24683.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、在iOS中下面三个控件,自身就有复制-粘贴的功能:

  1. UITextView

  2. UITextField

  3. UIWebView

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

二、废话少说,直接撸代码

#import "CopyLabel.h"

@implementation CopyLabel

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self pressAction];
    }
    return self;
}
// 初始化设置
- (void)pressAction {
    self.userInteractionEnabled = YES;
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
    longPress.minimumPressDuration = 0.25;
    [self addGestureRecognizer:longPress];
}

// 使label能够成为响应事件
- (BOOL)canBecomeFirstResponder {

    return YES;
}

// 自定义方法时才显示对就选项菜单,即屏蔽系统选项菜单
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(customCopy:)){

        return YES;
    }
    return NO;
}

- (void)customCopy:(id)sender {
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    pasteboard.string = self.text;
}
- (void)longPressAction:(UIGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        [self becomeFirstResponder];
        UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"拷贝" action:@selector(customCopy:)];
        UIMenuController *menuController = [UIMenuController sharedMenuController];
        menuController.menuItems = [NSArray arrayWithObjects:copyItem, nil];
        [menuController setTargetRect:self.frame inView:self.superview];
        [menuController setMenuVisible:YES animated:YES];
    }
}

@end

三、废话少说,直接看效果

- (void)viewDidLoad {
   [super viewDidLoad];
   CopyLabel *copy = [[CopyLabel alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width,50)];
   copy.text = @"清明时节雨纷纷,路上行人欲断魂。";
   copy.textAlignment = NSTextAlignmentCenter;
   copy.backgroundColor = [UIColor yellowColor];
   copy.textColor = [UIColor redColor];
   copy.font = [UIFont boldSystemFontOfSize:16];
   [self.view addSubview:copy];
}

INzIN3V.jpg!web

四、github地址: https://github.com/gitwangxiancheng/CopyLabel.git

五、是不是很心动,赶快试试吧

作者:小猪也浪漫

链接:https://www.jianshu.com/p/c47ea8835c9d


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK