美文网首页
2019-05-16物流信息里面实现Label显示手机号高亮并可

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

作者: 破夕_____________ | 来源:发表于2019-05-16 10:52 被阅读0次

    最近项目里有物流信息的东西,有一个这样的需求就是物流信息的数据里面会包含手机号,因为使用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];
        }
    }
    

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

    相关文章

      网友评论

          本文标题:2019-05-16物流信息里面实现Label显示手机号高亮并可

          本文链接:https://www.haomeiwen.com/subject/ktmbaqtx.html