我正在使用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