[ios] #태그 감지하고 링크 걸기

텍스트뷰나 라벨에서 해시태그를 감기 하기 위해선, 정규 표현식이 필요합니다.

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);                         }];

-------------------------------------------------------------------------------------------------------------------------------------------

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]];
    }
}








댓글

주간 인기글

[Ubuntu] inode full 해결을 위한 오래된 Kernel DATA 삭제

[AWS] ACM (Amazon Certificate Manager)를 통한 SSL 적용 웹사이트 구성

scp명령어를 이용하여 리눅스 서버 간 파일 이동하기

현수막/명함 등 인쇄물 디자인하기

파이썬을 이용하여 웹 크롤러 만들기 #2 - BeautifulSoup4을 활용하여 크롤링하기