iOS开发-UILabel实现长按复制等功能

目前遍查资料 UILabel虽然可以定义长按选择框,实现简单的全部复制。但是类似编辑框UItextView中的部分选择功能确难以实现。

这需要重新继承UILabel,利用attributedText的属性自定义实现。具体已经有大牛实现了,见URL:https://www.jianshu.com/p/7de3e6d19e31

 

可以直接下载,他定义的CJLabel来使用。见URL:https://github.com/lele8446/CJLabel

 

他的示范代码比较复杂,如果我只是需要里面的长按,选择复制功能,加入我原来的代码实现。我把自己的步骤说下。

第一部:引入CJLabel,定义一个Label组件。

#import "CJLabel.h"


@interface ProDetialContentCell()

//引用CJLabel
@property (weak, nonatomic) IBOutlet CJLabel *contentLb;

@end

第二步:实现下列函数,封装原来属性自定义:

#pragma mark - iOS开发-UILabel实现长按复制等功能
-(NSMutableAttributedString *)getAttStr:(NSString *)content paragraphStyle:(NSMutableParagraphStyle *)paragraphStyle{
    
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc]initWithString:content];
    
     [attStr addAttribute:NSFontAttributeName value:MEDIUMSYSTEMFONT(16) range:NSMakeRange(0, content.length)];
    
     [attStr addAttribute:NSForegroundColorAttributeName value:HEX_RGB(0x5c6185) range:NSMakeRange(0, content.length)];
    
     [attStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, attStr.length)];
       
       return attStr;
    
    
}

- (void)handleContent:(NSMutableAttributedString *)att{
    
    NSMutableAttributedString *attStr = att;
       
  
    self.contentLb.attributedText = attStr;
    self.contentLb.enableCopy = YES;//长按选择功能 打开
    
    
    
}

第三部在原来定义属性位置,替换加入引用。

//设置输入到行间距
- (void)setLineHeight:(NSString *)content
{
    
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = 5;// 字体的行间距
    
//    NSDictionary *attributes = @{
//                                 NSForegroundColorAttributeName:HEX_RGB(0x5c6185),
//                                 NSFontAttributeName:MEDIUMSYSTEMFONT(16),
//                                 NSParagraphStyleAttributeName:paragraphStyle};
//    self.contentLb.attributedText = [[NSAttributedString alloc] initWithString:content attributes:attributes];
    
    //add by tiberx 2019-12-17 iOS开发-UILabel实现长按复制等功能
    [self handleContent:[self getAttStr:content paragraphStyle:paragraphStyle]];
    
}

至此,就实现了UILabel的长按选择复制功能了。

感谢CJLabel的作者,让我们不必重复造车。但是实现原理,请大家还是要多研究下。

你可能感兴趣的:(IOS)