UITextView에서 자동 탐지된 링크의 색상을 변경할 수 있습니까?
나는.UITextView
전화 번호와 링크를 감지하지만, 이것은 내 것보다 우선합니다.fontColor
로 변경합니다.blueColor
자동 감지된 링크의 색을 포맷하는 방법이 있습니까? 아니면 이 기능의 수동 버전을 사용해 봐야 합니까?
iOS 7에서 다음을 설정할 수 있습니다.tintColor
의UITextView
링크 색상뿐만 아니라 커서 라인 및 선택한 텍스트 색상에도 영향을 미칩니다.
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 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
'programing' 카테고리의 다른 글
Expression Changed After It Has Be Checked Error: 식이 확인된 후 변경되었습니다.이전 값: '정의되지 않음' (0) | 2023.06.09 |
---|---|
vuex의 상태를 변환하는 중 (0) | 2023.06.09 |
csv 파일의 열 크기를 설정하는 방법은 무엇입니까? (0) | 2023.06.09 |
TypeScript에서 연산자를 사용하는 이유는 무엇입니까? (0) | 2023.06.09 |
MariaDB 가져오기 최대 키 길이 (0) | 2023.06.09 |