label识别text中的网址链接并做链接效果的展示,如下图

来源:互联网 发布:淘宝商城运营 编辑:程序博客网 时间:2024/05/20 05:06

识别URL的正则表达式:

((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)

可以通过分类的方式给label添加个分类, 为label新增个分类方法:

.h文件

#import <UIKit/UIKit.h>


@interface UILabel (LinkUrl)

- (void)setTextWithLinkAttribute:(NSString *)text;

@end


.m文件

#import "UILabel+LinkUrl.h"


@implementation UILabel (LinkUrl)

- (void)setTextWithLinkAttribute:(NSString *)text {

    self.attributedText = [selfsubStr:text];

}


-(NSMutableAttributedString*)subStr:(NSString *)string

{

    NSError *error;

    //可以识别url的正则表达式

    NSString *regulaStr =@"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)";

    NSRegularExpression *regex = [NSRegularExpressionregularExpressionWithPattern:regulaStr

                                                                          options:NSRegularExpressionCaseInsensitive

                                                                            error:&error];

    NSArray *arrayOfAllMatches = [regexmatchesInString:string options:0range:NSMakeRange(0, [stringlength])];

    NSMutableArray *arr=[[NSMutableArrayalloc]init];

    NSMutableArray *rangeArr=[[NSMutableArrayalloc]init];


    for (NSTextCheckingResult *matchin arrayOfAllMatches)

    {

        NSString* substringForMatch;

        substringForMatch = [string substringWithRange:match.range];

        [arr addObject:substringForMatch];


    }

    NSString *subStr=string;

    for (NSString *strin arr) {

        [rangeArr addObject:[selfrangesOfString:str inString:subStr]];

    }

    UIFont *font = [UIFontsystemFontOfSize:20];

    NSMutableAttributedString *attributedText;

    attributedText=[[NSMutableAttributedStringalloc]initWithString:subStrattributes:@{NSFontAttributeName :font}];


    for(NSValue *valuein rangeArr)

    {

        NSInteger index=[rangeArrindexOfObject:value];

        NSRange range=[valuerangeValue];

        [attributedText addAttribute:NSLinkAttributeNamevalue:[NSURLURLWithString:[arr objectAtIndex:index]]range:range];

        [attributedText addAttribute:NSForegroundColorAttributeNamevalue:[UIColorblueColor] range:range];


    }

    return attributedText;



}

//获取查找字符串在母串中的NSRange

- (NSValue *)rangesOfString:(NSString *)searchString inString:(NSString *)str {


    NSRange searchRange =NSMakeRange(0, [strlength]);


    NSRange range;


    if ((range = [strrangeOfString:searchString options:0range:searchRange]).location !=NSNotFound) {

        searchRange = NSMakeRange(NSMaxRange(range), [strlength] - NSMaxRange(range));

    }

    return [NSValuevalueWithRange:range];

}

@end


在你创建label的地方调用这个新增方法:

UILabel *label=[[UILabelalloc]initWithFrame:CGRectMake(18,100, CGRectGetWidth(self.view.frame) - 36, 100)];

label.numberOfLines =0;

[label setTextWithLinkAttribute:@"谷歌搜索好用http://www.google.com搜索用什么https://www.baidu.com百度一下你知道"];

[self.viewaddSubview:label];

效果实现!
0 0