UILabel - 문자열을 텍스트 및 링크로 사용
나는 있습니다UILabel내가 서버로부터 받는 문자는 누구의 것인지.텍스트 중 일부는 링크로 식별되어야 하며 이러한 링크를 터치할 때 다음과 같은 작업을 수행해야 합니다.
NSString *str = @"제 전화 번호는 645-345-2345이고 주소는 xyz입니다.";
다음에 대한 전체 텍스트입니다.UILabel저는 하나밖에 없습니다.UILabel이 텍스트를 표시합니다(텍스트는 동적입니다).예를 들어 설명했을 뿐입니다.)이 링크를 클릭하면 다른 화면으로 이동하거나 전화를 거는 등의 작업을 수행해야 합니다.
저는 OHA Attributed Label의 도움을 받아 이러한 텍스트를 표시할 수 있다는 것을 알고 있습니다.링크는 다음과 같이 표시할 수 있습니다.
[label1 addCustomLink:[NSURL URLWithString:@"http://www.foodreporter.net"] inRange:[txt rangeOfString:someString]];
하지만 이 텍스트 링크가 다른 화면으로 이동하거나 전화를 거는 등의 작업을 수행하도록 하려면 어떻게 해야 하는지 궁금합니다.
더 많은 설명이 필요하면 제게 알려주세요.
사용 가능한 모든 항목에 사용자 지정 작업을 추가할 수 있습니다.UILabel 가짜를 사용하여 링크를 지원하는 대체품나중에 가로챌 URL 구성표:
TTTAttributedLabel *tttLabel = <# create the label here #>;
NSString *labelText = @"Lost? Learn more.";
tttLabel.text = labelText;
NSRange r = [labelText rangeOfString:@"Learn more"];
[tttLabel addLinkToURL:[NSURL URLWithString:@"action://show-help"] withRange:r];
그러면, 당신의TTTAttributedLabelDelegate:
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url {
if ([[url scheme] hasPrefix:@"action"]) {
if ([[url host] hasPrefix:@"show-help"]) {
/* load help screen */
} else if ([[url host] hasPrefix:@"show-settings"]) {
/* load settings screen */
}
} else {
/* deal with http links here */
}
}
TTT Attributed Label은 OH Attributed Label의 포크입니다.
좀 더 복잡한 방법을 사용하려면 님버스 속성 레이블을 확인하십시오.즉시 사용자 지정 링크를 지원합니다.
전화 번호 및 링크 감지 YES와 함께 UItextView를 사용할 수 있으며, UI 레이블 대신 스크롤 비활성화 YES 사용자 상호 작용 활성화 YES를 사용할 수 있습니다.
제 프로젝트는 이를 위해 OH Attributed Label을 성공적으로 사용했습니다.다음을 확인하십시오.
-(BOOL)attributedLabel:(OHAttributedLabel*)attributedLabel shouldFollowLink:(NSTextCheckingResult*)linkInfo;
의 방법.OHAttributedLabelDelegate(link).링크를 클릭할 때 수행할 작업을 결정할 수 있습니다.OH Attributed Label 프로젝트의 예제 원본을 보면 경고를 표시하는 데 사용됩니다.만약 당신이 경우NO이 경우(기본 동작도 발생하지 않도록 하기 위해) 내비게이션 등 원하는 대로 할 수 있습니다.
그러나 이를 위해서는 텍스트만으로 작업을 올바르게 결정할 수 있어야 합니다.프로젝트를 위해 서버에서 태그가 포함된 텍스트와 각 태그에 대해 수행할 명령 목록을 전송하는 조금 더 고급스러운 솔루션을 사용했습니다.
당신에게 필요한 것에 대한 Fancy Label이라는 프로젝트가 있습니다.하지만 사용자 지정이 필요할 수도 있습니다.또한 Three20에는 이런 기능이 있다고 생각합니다만, 아직 사용하지 않으시면 오버킬이 될 수 있습니다.
모든 링크가 전화기 \주소 \url일 경우 훨씬 더 간단한 해결책도 있습니다.UI 레이블 대신 UI 텍스트 보기를 사용하면 됩니다.전화기, 주소 등의 자동 감지 기능이 있습니다(IB의 상자만 확인).
열려 있는 링크를 재정의하여 해당 링크의 클릭 이벤트에 대한 응답으로 사용자 지정 작업을 수행할 수도 있습니다.여기에 설명된 URL
UITextView 대신 UI 레이블을 사용해야 하는 특별한 이유가 있습니까?속성 레이블의 많은 구현은 UIView에서 상속되거나 UILabel의 일부 기능을 구현하지 못합니다.
사용자 지정 단추를 사용하여 링크 모양을 지정할 수 있습니다.또한 버튼을 사용하지 않으려면 사용자 지정 레이블에 제스처를 추가할 수 있습니다.
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTappedOnLink:)];
// if labelView is not set userInteractionEnabled, you must do so
[labelView setUserInteractionEnabled:YES];
[labelView addGestureRecognizer:gesture];
나는 강제로 사용하는 것을 좋아하지 않습니다.UITextView또는 링크를 렌더링하는 경량 레이블만 있으면 되는 타사 lib입니다(그리고 링크가 탭될 때 알려줍니다!).
가 경량급을 UILabel링크 탭을 탐지할 수 있는 하위 클래스입니다.접근 방식은 액세스할 수 있다는 점에서 제가 본 다른 접근 방식과 다릅니다.UILabel의된유NSLayoutManager 대자콜통해에 을 통해NSTextStorage범주 확장을 통해. 그것은 것입니다.UILabel기본 레이아웃 및 도면 수행 - 기타UILabel대체품은 종종 기본 동작을 추가로 보강하거나 대체합니다.NSLayoutManager/NSTextContainer.
아마도 앱스토어는 안전하지만 다소 취약할 수 있습니다. - 위험 부담 없이 사용하세요!
https://github.com/TomSwift/TSLabel
언급URL : https://stackoverflow.com/questions/8839464/uilabel-string-as-text-and-links
'programing' 카테고리의 다른 글
| 배열 목록을 방지합니다.인덱스 반환에서 추가() (0) | 2023.07.28 |
|---|---|
| 잘못된 iPhone 응용 프로그램 이진 (0) | 2023.07.28 |
| Android에서 이미지 보기를 지우는 방법은 무엇입니까? (0) | 2023.07.28 |
| RuntimeError "스칼라 유형 Float의 예상 개체이지만 인수에 대해 스칼라 유형 Double을 받았습니다"를 수정하는 방법은 무엇입니까? (0) | 2023.07.28 |
| 대규모 마이그레이션:두 번째 외래 키가 phpMyAdmin에서 보조 키로 생성되지 않음 (0) | 2023.07.28 |