programing

UITextView에서 자동 탐지된 링크의 색상을 변경할 수 있습니까?

showcode 2023. 6. 9. 22:10
반응형

UITextView에서 자동 탐지된 링크의 색상을 변경할 수 있습니까?

나는.UITextView전화 번호와 링크를 감지하지만, 이것은 내 것보다 우선합니다.fontColor로 변경합니다.blueColor자동 감지된 링크의 색을 포맷하는 방법이 있습니까? 아니면 이 기능의 수동 버전을 사용해 봐야 합니까?

iOS 7에서 다음을 설정할 수 있습니다.tintColorUITextView링크 색상뿐만 아니라 커서 라인 및 선택한 텍스트 색상에도 영향을 미칩니다.

iOS 7은 또한 새로운 속성을 추가했습니다.UITextView불렀다linkTextAttributes링크 스타일을 완전히 제어할 수 있습니다.

사용할 수 있습니다.UIAppearance모든 텍스트 보기에 대한 변경 사항을 적용하는 프로토콜:

Swift 4.x+:

UITextView.appearance().linkTextAttributes = [ .foregroundColor: UIColor.red ]

Swift 3.x:

UITextView.appearance().linkTextAttributes = [ NSForegroundColorAttributeName: UIColor.red ]

Swift 2.x:

UITextView.appearance().linkTextAttributes = [ NSForegroundColorAttributeName: UIColor.redColor() ]

목표-C:

[UITextView appearance].linkTextAttributes = @{ NSForegroundColorAttributeName : UIColor.redColor };

출연 기간UITextView문서화되지 않았지만 잘 작동합니다.

명심해UIAppearance주의:

iOS는 보기가 창에 들어갈 때 모양 변경을 적용하며, 이미 창에 있는 보기의 모양은 변경하지 않습니다.현재 창에 있는 보기의 모양을 변경하려면 보기 계층에서 보기를 제거한 다음 다시 놓습니다.

즉, 이 코드를 호출하는 것은init()또는init(coder:)메서드는 UI 개체 모양을 변경하지만 호출합니다.loadView()또는viewDidLoad()컨트롤러는 볼 수 없습니다.
전체 응용 프로그램의 모양을 설정하려면,application(_:didFinishLaunchingWithOptions:)그런 코드를 부르기에 좋은 장소입니다.

UITextView를 사용하는 대신 UIWebView를 사용하여 "자동 검색 링크"를 활성화했습니다.링크 색상을 변경하기 위해 태그에 대한 일반 CSS를 만들었습니다.

저는 다음과 같은 것을 사용했습니다.

NSString * htmlString = [NSString stringWithFormat:@"<html><head><script> document.ontouchmove = function(event) { if (document.body.scrollHeight == document.body.clientHeight) event.preventDefault(); } </script><style type='text/css'>* { margin:0; padding:0; } p { color:black; font-family:Helvetica; font-size:14px; } a { color:#63B604; text-decoration:none; }</style></head><body><p>%@</p></body></html>", [update objectForKey:@"text"]];
webText.delegate = self;
[webText loadHTMLString:htmlString baseURL:nil];

UITextView 문제linkTextAttributes자동으로 탐지된 모든 링크에 적용됩니다.서로 다른 링크에 서로 다른 속성을 부여하려면 어떻게 해야 합니까?

링크를 텍스트 보기의 속성 텍스트의 일부로 구성하고 빈 사전으로 설정하는 방법이 있습니다.

다음은 iOS 11 / Swift 4의 예입니다.

// mas is the mutable attributed string we are forming...
// ... and we're going to use as the text view's `attributedText`
mas.append(NSAttributedString(string: "LINK", attributes: [
    NSAttributedStringKey.link : URL(string: "https://www.apple.com")!,
    NSAttributedStringKey.foregroundColor : UIColor.green,
    NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue
]))
// ...
self.tv.attributedText = mas
// this is the important thing:
self.tv.linkTextAttributes = [:]

텍스트 보기에서 하이퍼링크 색상을 다음과 같이 변경할 수 있습니다.

Nib 파일에서 Properties 창으로 이동하여 원하는 색상으로 색조를 변경할 수 있습니다.

또는 아래 코드를 사용하여 프로그램적으로 수행할 수도 있습니다.

[YOURTEXTVIEW setTintColor:[UIColor whiteColor]];

스위프트 5 정답

단순하고 멋지군.

myTextView.linkTextAttributes = [.foregroundColor: UIColor.white]

색조 색상은 스토리보드에서도 가능합니다.

여기에 이미지 설명 입력

는 실제로 웹를 사용하지 않고 다른 방법을 찾았지만, 이것은 개인 API를 사용하며 앱스토어에서 거부될 수 있습니다.

EDIT: 개인 api 사용에도 불구하고 내 앱은 애플에 의해 승인되었습니다!

먼저 메서드를 사용하여 UITextView에서 범주를 선언합니다.

- (id)contentAsHTMLString;
- (void)setContentToHTMLString:(id)arg1;

그들은 단지 다음과 같은 일을 하고 있을 뿐입니다.

- (id)contentAsHTMLString;
{
    return [super contentAsHTMLString];
}

- (void)setContentToHTMLString:(id)arg1;
{
    [super setContentToHTMLString:arg1];
}

이제 컬러 링크에 대한 방법을 작성합니다.

- (void) colorfillLinks;
{
    NSString *contentString = [self.textViewCustomText contentAsHTMLString];
    contentString = [contentString stringByReplacingOccurrencesOfString:@"x-apple-data-detectors=\"true\""
                                         withString:@"x-apple-data-detectors=\"true\" style=\"color:white;\""];
    [self.textViewCustomText setContentToHTMLString:contentString];
}

모든 유형의 링크에서 특정 색상으로 스타일 속성을 설정합니다.

UITextView는 div를 통해 Webview로 렌더링되므로 더 나아가 각 링크 유형을 개별적으로 색칠할 수도 있습니다.

<div><a href="http://www.apple.com" x-apple-data-detectors="true" style="color:white;" x-apple-data-detectors-type="link" x-apple-data-detectors-result="0">http://www.apple.com</a></div>

x-apple-data-detectors-type="link"입니다.

편집

iOS7이것은 더 이상 작동하지 않습니다.iOS7에서는 UITextViews의 링크 색을 쉽게 변경할 수 있습니다.에 전화하면 안 .

- (id)contentAsHTMLString;

더 이상, 당신은 예외를 얻게 될 것입니다.대신 iOS 7 이하를 지원하려면 다음을 수행합니다.

- (void) colorfillLinks;
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    self.tintColor = [UIColor colorWithRed:79.0/255.0
                                     green:168.0/255.0
                                      blue:224.0/255.0
                                     alpha:1.0];
} else if(![self isFirstResponder ]) {
    NSString *contentString = [self contentAsHTMLString];
    contentString = [contentString stringByReplacingOccurrencesOfString:@"x-apple-data-detectors=\"true\""
                                                             withString:@"x-apple-data-detectors=\"true\" style=\"color:#DDDDDE;\""];
    [self setContentToHTMLString:contentString];

}
}

편집: 사용하지 않음UITextView,사용하다UIWebView대신.

당신은 그것을 위한 스타일시트를 만들어야 합니다.필요한 색상 조합으로 클래스 정의

.headercopy {
 font-family: "Helvetica";
 font-size: 14px;
 line-height: 18px;
 font-weight:bold;
 color: #25526e;
}
a.headercopy:link {
 color:#ffffff;
 text-decoration:none;
}
a.headercopy:hover {
 color:#00759B;
 text-decoration:none;
}
a.headercopy:visited {
 color:#ffffff;
 text-decoration:none;
} 
a.headercopy:hover {
 color:#00759B;
 text-decoration:none;
}

이제 클래스 'headercopy'를 HTML 페이지에 이렇게 사용합니다.

<b>Fax:</b><a href="tel:646.200.7535" class="headercopy"> 646-200-7535</a><br />

클릭 기능과 함께 필요한 색상으로 전화 번호가 표시됩니다.

이 코드는 I-Phone에서 전화 번호의 색상을 설정하지만 자동 통화 링크는 사용할 수 없습니다.

<div><a href="#" x-apple-data-detectors="true" style="color:white;" x-apple-data-detectors-type="link" x-apple-data-detectors-result="0">p&nbsp;&nbsp;0232 963 959</a></div>

Swift 5를 사용한 방법은 다음과 같습니다.

let attributedString = NSMutableAttributedString(string: myTextView.text ?? "")
myTextView.linkTextAttributes = [NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.whiteColor] as [NSAttributedString.Key: Any]?
myTextView.attributedText = attributedString

언급URL : https://stackoverflow.com/questions/1350423/can-i-change-the-color-of-auto-detected-links-on-uitextview

반응형