2019-05-16物流信息里面实现Label显示手机号高亮并可以拨打电话

最近项目里有物流信息的东西,有一个这样的需求就是物流信息的数据里面会包含手机号,因为使用UILabel加载的物流信息,所以就要在里面显示手机号高亮,并能拨打出去,方便用户联系相关人员,直接上代码

@property (copy, nonatomic) NSAttributedString *phoneNumber;

-(void)getPhoneNumLabel:(UILabel *)label labelStr:(NSString *)labelStr
{
    //获取字符串中的电话号码
    NSString *regulaStr = @"\\d{3,4}[- ]?\\d{7,8}";
    NSRange stringRange = NSMakeRange(0, labelStr.length);
    //正则匹配
    NSError *error;
    NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:labelStr];
    NSRegularExpression *regexps = [NSRegularExpression regularExpressionWithPattern:regulaStr options:0 error:&error];
    if (!error && regexps != nil) {
        [regexps enumerateMatchesInString:labelStr options:0 range:stringRange usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop)
 {
            NSRange phoneRange = result.range;
            //定义一个NSAttributedstring接受电话号码字符串
            self.phoneNumber = [str attributedSubstringFromRange:phoneRange];
            //添加下划线
            NSDictionary *attribtDic = @{NSUnderlineStyleAttributeName: [NSNumber numberWithInteger:NSUnderlineStyleSingle]};
            [str addAttributes:attribtDic range:phoneRange];
            //设置文本中的电话号码显示为红色
            [str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:phoneRange];
            label.attributedText = str;
            label.userInteractionEnabled = YES;
            //添加手势,可以点击号码拨打电话
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGesture:)];
            [label addGestureRecognizer:tap];
        }];
    }
}


实现拨打电话

//实现拨打电话的方法
-(void)tapGesture:(UITapGestureRecognizer *)sender
{
    NSString *deviceType = [UIDevice currentDevice].model;
    if([deviceType  isEqualToString:@"iPod touch"]||[deviceType  isEqualToString:@"iPad"]||[deviceType  isEqualToString:@"iPhone Simulator"])
    {
        UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"您的设备不能打电话" delegate:nil cancelButtonTitle:@"好的,知道了" otherButtonTitles:nil,nil];
        [alert show];
    }
    else
    {
        //NSAttributedstring转换为NSString
        NSString *stringNum = [self.phoneNumber string];
        NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",stringNum];
        NSString *newStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        UIWebView * callWebview = [[UIWebView alloc] init];
        [callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newStr]]];
        [self addSubview:callWebview];
    }
}

在赋值之后愉快的调用这个方法就好了~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于项目需要,增加效率,选择接入了Jenkins可持续打包工具来实现这一目的。网上有很多iOS jenkins打包...
    blueskyinwind阅读 1,212评论 1 3
  • 2018.12.11 轻松、清闲,今天主要打了两通课前电话和跟进了一下身心语的手尾,整理了一下财务数据。一直认为用...
    Ami149131阅读 226评论 0 0
  • 1、基本用法 首先,我们看看强大的分列功能在哪,在Excel的【数据】选项卡下,有一个【分列】按钮 2、文本→数值...
    小筠筠阅读 156评论 0 0