이번 포스팅은 3rd-Party 확장 클래스인 TTTAttributedLabel에 대한 소개 및 간단한 예제에 관한 것이다. 이 확장은 아래 github 저장소에서 구할 수 있다.
TTTAttributedLabel.m, TTTAttibutedLabel.h 파일 두 개로 구성된 간단한 프로젝트이기 때문에 이 두 파일을 프로젝트에 넣기만 하면 사용 준비는 끝난다.
UILabel을 상속받아 구현한 클래스이기 때문에 인터페이스 빌더에서 사용하려면 클래스 타입을 TTTAttiributedLabel 로 설정하면 된다. 여기서는 코드레벨의 사용법으로 정리한다.
앞서 이야기 한 대로 UILabel을 베이스로 한 클래스이기 때문에 기본 사용법은 동일하다. 하지만 링크를 지원하기 위해서는 좀 복잡한 방법을 요구한다. 아래와 같은 스크린샷의 라벨을 어떻게 만드는지 살펴보자.
아래의 샘플 코드는 위의 라벨을 만들기 위해 폰트, 텍스트 색상, 가운데 정렬, 링크 색상 등을 지정하는 것을 보여준다.
// 라벨에 표시할 문자열 NSString *string = @"Simple Text contain touchable SOME LINK using TTTAttributedLabel"; // 문단(Paragraph) 스타일 설정 NSMutableParagraphStyle *ps = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; ps.alignment = NSTextAlignmentCenter; // 텍스트 속성 설정 NSDictionary *textAttr = @{ NSFontAttributeName: [UIFont systemFontOfSize:16], NSParagraphStyleAttributeName: ps, NSForegroundColorAttributeName: [UIColor blackColor] }; // 문자열을 NSString이 아닌 NSAttributedString 으로 생성한다. NSAttributedString *str = [[NSAttributedString alloc] initWithString:string attributes:textAttr]; TTTAttributedLabel *attrLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectMake(10, 30, 300, 300)]; // textColor는 위 textAttr에서 설정하기 때문에 사실상 의미없는 설정이다. attrLabel.textColor = [UIColor blackColor]; attrLabel.lineBreakMode = NSLineBreakByWordWrapping; // font도 위 textAttr에서 설정하고 있다. 별 의미 없다. attrLabel.font = [UIFont systemFontOfSize:16]; attrLabel.backgroundColor = [UIColor whiteColor]; attrLabel.numberOfLines = 0; // no limit multi-line attrLabel.text = str; // textAlignment는 textAttr에서 설정해야 한다. 이 코드는 무의미하다. attrLabel.textAlignment = NSTextAlignmentCenter; // 링크를 받을 delegate attrLabel.delegate = self; // 링크 색상 및 언더라인 스타일 설정 NSDictionary *linkAttr = @{ NSForegroundColorAttributeName: [UIColor redColor], NSUnderlineStyleAttributeName: [NSNumber numberWithInt:1] }; attrLabel.linkAttributes = linkAttr; attrLabel.activeLinkAttributes = linkAttr; attrLabel.inactiveLinkAttributes = linkAttr; // 링크 추가하기 - "SOME LINK" 라는 문자열을 찾아서 링크를 건다 NSRange range = [string rangeOfString:@"SOME LINK"]; NSURL *url = [NSURL URLWithString:@"http://google.com/"]; [attrLabel addLinkToURL:url withRange:range]; [self.view addSubview:attrLabel];
최종적으로 addSubview를 이용해 TTTAttributedLabel을 원하는 뷰(view)에 붙인다.
위의 예제는 Cocoa에서 제공하는 NSAttributedString 이라는 '속성을 가질 수 있는 문자열 클래스'를 이용한다. 이것을 사용하지 않으면 몇 가지 색상 속성이나 폰트, 좌/우/가운데 정렬 등이 동작하지 않는다. 실제로 위 코드에서 textAlignment 를 설정하는 부분에서 주석을 달아놨지만 이 값을 NSTextAlignmentCenter로 설정해도 가운데 정렬이 되지 않는다. 따라서 수평정렬(text alignment)는 NSParagraphStyle을 이용해 정의한다.
즉 위 코드를 제대로 이해하려면 NSParagraphStyle 이나 NSAttributedString 에 대한 지식이 필요하다. 직접 Xcode 상에서 Documentation을 검색해서 공부하자.
추가로 delegate 를 설정하고 있으므로 인터페이스 정의에서 TTTAttributedLabelDelegate 프로토콜을 이용하도록 명시하고 delegate 를 구현한다.
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { NSLog(@"Touched %@", [url absoluteString]); [[UIApplication sharedApplication] openURL:url]; }delegate에서 구현되는 내용은 앱 개발을 조금이라도 해 봤다면 바로 알 만한 내용이다. 첫 줄은 로그로 터치된 URL이 무엇인지 표시해 주고 그 다음줄은 openURL 즉 여기서는 google.com을 사파리로 띄워준다.
이 밖에도 링크 URL 형식을 찾아 자동으로 링크를 걸어주는 기능을 제공했던 것 같기도(?) 하다. 자세한 건 직접 구글신에게 빌어보자.
0 comments:
댓글 쓰기