我有UITextView
来检测电话号码和链接,但这会覆盖我的fontColor
并将其更改为blueColor
。有没有办法格式化自动检测链接的颜色,或者我应该尝试这个功能的手动版本吗?
答案 0 :(得分:154)
在iOS 7上,您可以设置tintColor
的{{1}}。它会影响链接颜色以及光标线和选定的文本颜色。
iOS 7还为名为UITextView
的{{1}}添加了一个新属性,可让您完全控制链接样式。
答案 1 :(得分:40)
我没有使用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];
答案 2 :(得分:28)
您可以使用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对象外观,但调用viewController的loadView()
或viewDidLoad()
不会即可。
如果要为整个应用程序设置外观,application(_:didFinishLaunchingWithOptions:)
是调用此类代码的好地方。
答案 3 :(得分:11)
您可以通过以下方式更改TextView中的超链接颜色:
在Nib文件中,您可以转到“属性”窗口并将颜色更改为您想要的颜色。
或者您也可以使用以下代码以编程方式执行此操作
[YOURTEXTVIEW setTintColor:[UIColor whiteColor]];
答案 4 :(得分:8)
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 = [:]
答案 5 :(得分:4)
答案 6 :(得分:3)
我发现确实采用了另一种方式而不使用网页浏览,但请注意,这会使用私有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];
}
它会在所有类型的链接上使用特定颜色设置style属性。
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];
}
}
答案 7 :(得分:1)
修改强>
请勿使用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 />
这将以点击功能显示所需颜色的电话号码。
答案 8 :(得分:0)
此代码将设置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>
答案 9 :(得分:0)
这就是我使用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
答案 10 :(得分:0)
快速5答案
又好又简单
myTextView.linkTextAttributes = [.foregroundColor: UIColor.white]