[ios] #태그 감지하고 링크 걸기
텍스트뷰나 라벨에서 해시태그를 감기 하기 위해선, 정규 표현식이 필요합니다.
Objective-C 에서는 NSRegularExpression를 통해서 정규식 표현을 하고 감지를 할수 있습니다.
-------------------------------------------------------------------------------------------------------------------------------------------
1. NSRegularExpression 객체를 생성하고, regularExpressionWithPattern에 정규식을 넣습니다.
-------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------
Objective-C 에서는 NSRegularExpression를 통해서 정규식 표현을 하고 감지를 할수 있습니다.
-------------------------------------------------------------------------------------------------------------------------------------------
1. NSRegularExpression 객체를 생성하고, regularExpressionWithPattern에 정규식을 넣습니다.
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];
-------------------------------------------------------------------------------------------------------------------------------------------
2. enumerateMatchesInString:text 함수를 이용하여, 매칭되는 객체는 NSTextCheckingResult에 저장되고, 사용할수 있습니다.
[regex enumerateMatchesInString:text options:0 range:NSMakeRange(0, [text length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) { // NSLog(@"Ranges: %ld", (unsigned long)[match numberOfRanges]); NSString *matchFull = [text substringWithRange:[match range]]; // NSLog(@"Match: %@", matchFull); }];
[regex enumerateMatchesInString:text options:0 range:NSMakeRange(0, [text length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) { // NSLog(@"Ranges: %ld", (unsigned long)[match numberOfRanges]); NSString *matchFull = [text substringWithRange:[match range]]; // NSLog(@"Match: %@", matchFull); }];
-------------------------------------------------------------------------------------------------------------------------------------------
3. matchFull 객체에는 정규식으로 넣은 객체와 일치하는 객체를 반환합니다.
해당 객체들을 링크를 걸려면,아래의 함수를 이용하여 링크를 넣을수 있습니다.
- (void)addLink:(NSString *)link linkColor:(UIColor *)linkColor text:(NSString *)text {
NSString *pattern = [NSString stringWithFormat:@"(%@)", text];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
NSArray<NSTextCheckingResult *> *matches = [regex matchesInString:self.mutableString options:0 range:NSMakeRange(0, self.length)];
for (NSTextCheckingResult *result in matches) {
[self addAttribute:NSLinkAttributeName value:link range:[result rangeAtIndex:0]];
[self addAttribute:NSForegroundColorAttributeName value:linkColor range:[result rangeAtIndex:0]];
}
}
댓글
댓글 쓰기