回答:
iOSの7上では、設定できるtintColor
のをUITextView
。リンクの色、カーソル線、選択したテキストの色に影響します。
iOSの7はまたに新しいプロパティを追加UITextView
と呼ばれるlinkTextAttributes
あなたは完全にリンクのスタイルを制御できるように思われます。
NSFontAttributeName
with をオーバーライドできませんでしたlinkTextAttributes
。私と同じ範囲のフォントを手動で指定する必要がありましたNSLinkAttributeName
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];
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() ]
Objective-C:
[UITextView appearance].linkTextAttributes = @{ NSForegroundColorAttributeName : UIColor.redColor };
の外観UITextView
は文書化されていませんが、正常に機能します。
UIAppearance
注意事項を覚えておいてください。
iOSは、ビューがウィンドウに入るときに外観の変更を適用します。すでにウィンドウ内にあるビューの外観は変更しません。現在ウィンドウ内にあるビューの外観を変更するには、ビュー階層からビューを削除してから元に戻します。
つまりinit()
、このコードを、またはinit(coder:)
メソッドで呼び出すと、UIオブジェクトの外観が変更されますが、、loadView()
またはviewDidLoad()
viewController を呼び出すと、は変更されません。
アプリケーション全体の外観を設定する場合application(_:didFinishLaunchingWithOptions:)
は、そのようなコードを呼び出すのに適しています。
UITextViewの問題 linkTextAttributes
は、自動検出されたすべてのリンクに適用されることです。異なるリンクに異なる属性を持たせたい場合はどうなりますか?
トリックがあることがわかります:テキストビューの属性付きテキストの一部としてリンクを構成し、空の辞書に設定します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 = [:]
私は確かにwebviewを使用せずに別の方法を見つけましたが、これはプライベートAPIを使用しており、appstoreで拒否される可能性があることに注意してください:
編集:私のアプリはアップルによって承認されましたが、プライベート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];
}
すべてのタイプのリンクに特定の色でスタイル属性を設定します。
UITextViewsはdiv経由のようにWebiviewでレンダリングされるため、さらに進んで各リンクタイプに個別に色を付けることもできます。
<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];
}
}
EDIT:
DOはでそれをしないで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;
}
次のように、htmlページに「headercopy」クラスを使用します。
<b>Fax:</b><a href="tel:646.200.7535" class="headercopy"> 646-200-7535</a><br />
これにより、クリック機能で必要な色で電話番号が表示されます。
これは、私が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