我有一个UITextView
检测到电话号码和链接,但这会覆盖我fontColor
并将其更改为blueColor
.有没有办法格式化自动检测链接的颜色,或者我应该尝试这个功能的手动版本?
在iOS 7,您可以设置tintColor
的UITextView
.它会影响链接颜色以及光标线和选定的文本颜色.
iOS 7还为UITextView
被调用添加了一个新属性,linkTextAttributes
它可以让您完全控制链接样式.
我没有使用UITextView,而是使用了UIWebView并启用了"自动检测链接".要更改链接颜色,只需为标记创建常规CSS.
我使用过这样的东西:
NSString * htmlString = [NSString stringWithFormat:@"%@
", [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对象外观,但调用in loadView()
或viewDidLoad()
viewController 不会.
如果要为整个应用程序设置外观,application(_:didFinishLaunchingWithOptions:)
是调用此类代码的好地方.
您可以通过以下方式更改TextView中的超链接颜色:
In the Nib file, you can go to the Properties Window and change the Tint to which ever color you want to.
or you can also do it programatically by using the below code
[YOURTEXTVIEW setTintColor:[UIColor whiteColor]];
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 = [:]