前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS创建支持长按复制的Label控件

iOS创建支持长按复制的Label控件

作者头像
公众号iOS逆向
发布2021-07-29 16:13:18
1.2K0
发布2021-07-29 16:13:18
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全

前言

实现原理

CopyTextLabel 通过将canPerformCopyAction置为YES来开启长按复制文本的功能。

效果

在这里插入图片描述

先了解一下UILabel的基本用法

I、UILabel的基本用法

1.1 显示模式

  • NSLineBreakByWordWrapping = 0,

单词包裹,换行的时候会以一个单词换行

  • NSLineBreakByCharWrapping,

字符包裹换行,换行的时候会以一个字符换行

  • NSLineBreakByClipping,

裁剪超出的内容

  • NSLineBreakByTruncatingHead,

一行中头部省略(注意:numberOfLines要为1): "...#公众号:iOS逆向"

  • NSLineBreakByTruncatingTail,

一行中尾部省略: "#公众号:iOS逆向..."

  • NSLineBreakByTruncatingMiddle

一行中中间部省略: "#公众号:...iOS逆向."

1.2 例子:一行中头部省略

在这里插入图片描述

  • demo
代码语言:javascript
复制
- (void)iOSDevloperLearn4UILabel{
    
    
    // 1.1 创建UILabel对象
    UILabel *label = [[UILabel alloc] init];
    
    // 1.2 设置frame
    label.frame = CGRectMake(100, 100, 202, 175);
    
    // 1.3 设置背景颜色
    label.backgroundColor = [UIColor redColor];
    
    // 1.4 设置文字    label.text = @"公众号:iOS逆向";
    label.text = @"博客地址:https://kunnan.blog.csdn.net #公众号:iOS逆向 ";

    
    // 1.5 居中
    label.textAlignment = NSTextAlignmentCenter;
    
    // 1.6 设置字体大小
    label.font = [UIFont systemFontOfSize:20.f];
    label.font = [UIFont boldSystemFontOfSize:25.f];
    label.font = [UIFont italicSystemFontOfSize:20.f];
    
    // 1.7 设置文字的颜色
    label.textColor = [UIColor whiteColor];
    
    // 1.8 设置阴影(默认是有值)
    label.shadowColor = [UIColor blackColor];
    label.shadowOffset = CGSizeMake(-2, 1);
    
    // 1.9 设置行数(0:自动换行)
    label.numberOfLines = 1;
    
    // 1.10 显示模式
    label.lineBreakMode =  NSLineBreakByTruncatingHead;
    
    /*
     NSLineBreakByWordWrapping = 0,  // 单词包裹,换行的时候会以一个单词换行
     NSLineBreakByCharWrapping,        // 字符包裹换行,换行的时候会以一个字符换行
     NSLineBreakByClipping,        // 裁剪超出的内容
     NSLineBreakByTruncatingHead,    // 一行中头部省略(注意:numberOfLines要为1): "...wxyz"
     NSLineBreakByTruncatingTail,    // 一行中尾部省略: "abcd..."
     NSLineBreakByTruncatingMiddle    // 一行中中间部省略:  "ab...yz"
     */
    
    
    // 2.0 添加到控制器的view中
    [self.view addSubview:label];

}

II、 案例:实现长按复制文本的功能

2.1 实现步骤

CopyTextLabel 通过将canPerformCopyAction置为YES来开启长按复制文本的功能。并自定义 UIMenuController来处理事件

2.2 具体的代码

  • h
代码语言:javascript
复制
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface QCTCopyLabel : UILabel
- (instancetype)init;

@end


  • m
代码语言:javascript
复制
//
//  QCTCopyTextLabel.m
//  retail
//
//  Created by mac on 2020/1/17.
//  Copyright © 2020 QCT. All rights reserved.
//

#import "QCTCopyTextLabel.h"

@implementation QCTCopyTextLabel

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/
- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setUp];
    }
    return self;
}

- (instancetype)init {
    self = [super init];
    if (self) {
        [self setUp];
    }
    return self;
}

// 设置label可以成为第一响应者
- (BOOL)canBecomeFirstResponder {
    return YES;
}

// 设置长按事件
- (void)setUp {
    /* 你可以在这里添加一些代码,比如字体、居中、夜间模式等 */
    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress)]];
}

// 长按事件
- (void)longPress {
    // 设置label为第一响应者
    [self becomeFirstResponder];
    // 自定义 UIMenuController
    UIMenuController * menu = [UIMenuController sharedMenuController];
    UIMenuItem * item1 = [[UIMenuItem alloc]initWithTitle:QCTLocal(@"copy") action:@selector(copyText:)];
    menu.menuItems = @[item1];
    [menu setTargetRect:self.bounds inView:self];
    [menu setMenuVisible:YES animated:YES];
}

// 设置label能够执行那些具体操作
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if(action == @selector(copyText:)) return YES;
    return NO;
}

// 复制方法
- (void)copyText:(UIMenuController *)menu {
    // 没有文字时结束方法
    if (!self.text) return;
    // 复制文字到剪切板
    UIPasteboard * paste = [UIPasteboard generalPasteboard];
    paste.string = self.text;
}



@end
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • I、UILabel的基本用法
    • 1.1 显示模式
      • 1.2 例子:一行中头部省略
      • II、 案例:实现长按复制文本的功能
        • 2.1 实现步骤
          • 2.2 具体的代码
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档