我正在使用UITextView使标签可选。它完美地检测水龙头。我的问题是选择颜色。它看起来是黑色的,我希望文本在选择上淡入淡出。 这就是我现在得到:如何更改UITextView超链接选择背景颜色?
我试图改变tintColor
,在NSForegroundColorAttributeName
和NSBackgroundColorAttributeName
,但它不工作。
我正在使用UITextView使标签可选。它完美地检测水龙头。我的问题是选择颜色。它看起来是黑色的,我希望文本在选择上淡入淡出。 这就是我现在得到:如何更改UITextView超链接选择背景颜色?
我试图改变tintColor
,在NSForegroundColorAttributeName
和NSBackgroundColorAttributeName
,但它不工作。
对于检测到的链接的选定或突出显示的颜色没有文档属性,但您应该能够通过覆盖委托方法textView:shouldInteractWithURL:inRange:
并自己更改颜色来获得相同的效果。
从UITextViewDelegate协议参考:
文本视图调用此方法,如果用户的抽头或长按压 URL链接。这种方法的实现是可选的。默认情况下, 文本视图将打开负责处理URL类型 的应用程序并将其传递给URL。您可以使用此方法触发 替代操作,例如在当前应用程序的Web视图中的URL中显示网页内容。
最后一个参数是一个名为characterRange
的NSRange对象,它表示包含点击URL(或标签)的字符范围。使用该范围,您应该能够添加诸如NSForegroundColorAttributeName
之类的属性,以仅更改所点击的特定哈希标签的颜色。
您可能会想要恢复touchesEnded
和touchesCancelled
上的任何更改。
解决此问题的方法可以完成,您可以使用UIButton而不是textview。通过使用按钮,你可以有相同的效果。
虽然没有公开的API来做到这一点,但我很好奇,决定挖掘private header的UITextField
。我发现在UITextField
_sharedHighlightView
上有一个类方法,它返回私有类_UIHighlightView
的一个实例。这是负责突出显示的班级。 Swizzling _sharedHighlightView
并更改其颜色将允许您更改任何数据检测链接的颜色:
警告:这是一种使用方法调配和私有API /属性的黑客攻击。
class MyTextView: UITextView {
var newHighlightView: AnyObject?
func changeHighlight() {
self.newHighlightView = UITextView.performSelector(Selector("_sharedHighlightView")).takeUnretainedValue()
self.newHighlightView?.setValue(UIColor.redColor().colorWithAlphaComponent(0.6), forKey: "_color")
let originalHighlightView = class_getClassMethod(MyTextView.self, Selector("_sharedHighlightView"))
let newHighlightView = class_getClassMethod(MyTextView.self, #selector(MyTextView.swizzleHighlightView))
method_exchangeImplementations(originalHighlightView, newHighlightView)
}
func swizzleHighlightView() -> AnyObject {
return self.newHighlightView!
}
}
在您的视图控制器:
let textView = MyTextView(frame: CGRect(x: 0, y: 40.0, width: 200.0, height: 200.0))
textView.dataDetectorTypes = .All
textView.editable = false
textView.text = "Some text. http://www.google.com/"
textView.changeHighlight()
self.view.addSubview(textView)
结果:
这或许可以通过不强制展开任何自选清理远一点。
我在用途上使用了一个textview。拥有多个行动点。这是不可能的一个uibutton – jonypz