Ios 如何更改UITextView超链接选择的背景色?
我正在使用UITextView使hashtags可选择。它能很好地检测水龙头。我的问题是选择颜色。它看起来是黑色的,我希望文本在选择时淡出一点。 这是我现在得到的:Ios 如何更改UITextView超链接选择的背景色?,ios,hyperlink,uitextview,uicolor,Ios,Hyperlink,Uitextview,Uicolor,我正在使用UITextView使hashtags可选择。它能很好地检测水龙头。我的问题是选择颜色。它看起来是黑色的,我希望文本在选择时淡出一点。 这是我现在得到的: 我已尝试更改tintColor、NSForegroundColorAttributeName和NSBackgroundColorAttributeName,但无效。检测到的链接的选定或突出显示的颜色没有文档属性,但是,通过覆盖委托方法textView:shouldInteractWithURL:inRange:并自己更改颜色,您应
我已尝试更改
tintColor
、NSForegroundColorAttributeName
和NSBackgroundColorAttributeName
,但无效。检测到的链接的选定或突出显示的颜色没有文档属性,但是,通过覆盖委托方法textView:shouldInteractWithURL:inRange:
并自己更改颜色,您应该能够实现相同的效果
从协议参考中:
如果用户轻按或长按
URL链接。此方法的实现是可选的。默认情况下
文本视图打开负责处理URL类型的应用程序
并将URL传递给它。您可以使用此方法触发
替代操作,例如在
当前应用程序中的web视图
最后一个参数是名为characterRange
的NSRange对象,它表示包含点击URL(或哈希标记)的字符范围。使用该范围,您应该能够添加属性,例如NSForegroundColorAttributeName
,以便仅更改所点击的特定哈希标记的颜色
您可能希望恢复touchesend
和touchecancelled
上的任何更改
或者,您也可以。为了解决这个问题,您可以使用UIButton而不是textview。通过使用按钮,您可以获得相同的效果 尽管没有公共API来实现这一点,但我很好奇,决定深入研究for
UITextField
。我发现在UITextField
\u sharedHighlightView
上有一个class方法,它返回私有类的实例。这是负责突出显示的班级。旋转\u sharedHighlightView
并更改其颜色将允许您更改任何检测到的数据链接的颜色:
警告:这是一种使用方法swizzling和私有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是不可能的