如何在搜索时突出显示UILabel格式的电话号码

时间:2018-07-17 20:20:04

标签: objective-c string nsstring uilabel

如何在搜索时用格式化的电话号码突出显示file_name = 'input_file' from file_name import (VarA, VarB, VarC)

示例:

一个单元格正在显示一个联系人列表,其编号为:+381 60 0000000

如果我输入3,我希望+和3高亮显示(颜色不同)

如果我输入38160,我希望突出显示+381 60(颜色不同)。

依此类推...


这个问题的重点是如何通过跳过空格和+号为匹配数字着色?

这是我到目前为止已经尝试过的方法,但是仅当我从标签的文本值中删除空格和+号时,该方法才有效:

UILabel

1 个答案:

答案 0 :(得分:0)

感谢@Larme,我已经回答了我自己的问题:)

// Highlighted search for numbers
NSString *phoneString = @"+381 60 000343";
NSString *firstComponent = @"\\+?"; // Skip a leading + char
NSMutableArray *digits = [[NSMutableArray alloc] init];
[self.searchString enumerateSubstringsInRange:NSMakeRange(0, [self.searchString length])
                                     options:NSStringEnumerationByComposedCharacterSequences
                                  usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
                                      [digits addObject:substring];
                                  }];
NSString *pattern = [[NSString alloc] initWithFormat:@"%@%@", firstComponent, [digits componentsJoinedByString:@"\\s?"]];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:phoneString];
NSRange selectedRange = [[string string] rangeOfString:pattern options:NSRegularExpressionSearch];

if (selectedRange.location != NSNotFound) {
    [string beginEditing];
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:selectedRange];
    [string endEditing];
}

cell.phoneNumberLabel.attributedText = string;