Program Club

UILabel-텍스트 및 링크로서의 문자열

proclub 2020. 10. 28. 21:16
반응형

UILabel-텍스트 및 링크로서의 문자열


나는 UILabel서버에서 텍스트를 받고 있습니다. 일부 텍스트는 링크로 식별되어야하며 해당 링크를 터치하면 몇 가지 작업을 수행해야합니다. 예 :

NSString * str = @ "내 전화 번호는 645-345-2345 이고 내 주소는 xyz입니다. ";

에 대한 전체 텍스트입니다 UILabel. UILabel이 텍스트를 표시하는 데 하나만 있습니다 (텍스트는 동적입니다. 방금 예를 들었습니다.). 이 링크를 클릭하면 다른 화면으로 이동하거나 전화를 거는 등의 작업을 수행해야합니다. OHAttributedLabel
도움으로 이러한 텍스트를 표시 할 수 있다는 것을 알고 있습니다 . 그리고 링크는 다음과 같이 표시 될 수 있습니다.

[label1 addCustomLink:[NSURL URLWithString:@"http://www.foodreporter.net"] inRange:[txt rangeOfString:someString]];  

그러나 이러한 텍스트 링크 가 다른 화면으로 이동하거나 전화를 거는 것과 같은 작업을 수행 하도록하려면 어떻게 해야할까요?
더 많은 설명이 필요하면 알려주세요.


나중에 가로 챌 가짜 URL 체계UILabel사용하여 링크를 지원 하는 사용 가능한 대체 항목 에 사용자 지정 작업을 추가 할 수 있습니다 .

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 */
    }
}

TTTAttributedLabelOHAttributedLabel 의 포크입니다.

더 복잡한 접근 방식을 원한다면 Nimbus Attributed Label을 살펴보십시오 . 즉시 사용 가능한 사용자 지정 링크를 지원합니다.


UILabel 대신 전화 번호 및 링크 감지 YES, 스크롤링 비활성화 YES 사용자 상호 작용 활성화 YES와 함께 UITextView를 사용할 수 있습니다.


내 프로젝트에서 OHAttributedLabel을 성공적으로 사용했습니다. 확인

-(BOOL)attributedLabel:(OHAttributedLabel*)attributedLabel shouldFollowLink:(NSTextCheckingResult*)linkInfo;

OHAttributedLabelDelegate( 링크 )의 메소드 . 링크를 클릭하면 어떤 일이 발생하는지 결정할 수 있습니다. OHAttributedLabel 프로젝트의 예제 소스를 보면 경고를 표시하는 데 사용됩니다. NO이 경우에 돌아온 경우 (기본 작업도 발생하지 않도록) 탐색 등 원하는대로 수행 할 수 있습니다.

그러나 이렇게하려면 텍스트만으로 작업을 올바르게 결정할 수 있어야합니다. 우리 프로젝트에서는 서버가 태그와 각 태그에 대해 수행 할 명령 목록이 포함 된 텍스트를 보내는 약간 더 멋진 솔루션을 사용했습니다.


필요한 것에 대한 FancyLabel 이라는 프로젝트 가 있습니다. 그래도 일부 사용자 정의가 필요할 수 있습니다. 또한 Three20 에이 기능이 있다고 생각 하지만 아직 사용하지 않으면 과잉 일 수 있습니다.

또한 모든 링크가 전화 \ 주소 \ URL 인 경우 훨씬 더 간단한 솔루션이 있습니다. UILabel 대신 UITextView를 간단히 사용할 수 있습니다. 전화, 주소 등을 자동으로 감지합니다 (IB의 확인란 만 선택하면 됨).

여기에 설명 된대로 openURL을 재정 의하여 해당 링크의 클릭 이벤트에 대한 응답으로 사용자 지정 작업을 수행 할 수도 있습니다.

UITextView 대신 UILabel을 사용해야하는 특별한 이유가 있습니까? 속성 레이블의 많은 구현은 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또는 모든 I 필요가 링크를 렌더링하는 경량 레이블 타사 LIB (그들이 도청 할 때 그 날을 알려주는!)

여기 UILabel링크 탭을 감지 할 수 있는 경량 하위 클래스 에 대한 나의 시도가 있습니다. 접근 방식은 카테고리 확장 통해 추가 된 델리게이트 콜백을 통해 UILabel공유 된에 대한 액세스를 얻는다는 점에서 제가 본 다른 접근 방식과 다릅니다 . 아름다움은 기본 레이아웃 및 그리기 수행하는 것입니다. 다른 대체는 종종 기본 동작을 추가 /으로 늘리거나 대체합니다 .NSLayoutManagerNSTextStorageUILabelUILabelNSLayoutManagerNSTextContainer

Probably App Store safe, but somewhat fragile - use at your own risk!

https://github.com/TomSwift/TSLabel

참고URL : https://stackoverflow.com/questions/8839464/uilabel-string-as-text-and-links

반응형