我正在使用UITextView来选择主题标签。它可以完美地检测水龙头。我的问题是选择颜色。它看起来很黑,我希望文字在选择上略微淡化。 这就是我现在所拥有的:
我尝试更改tintColor
,NSForegroundColorAttributeName
和NSBackgroundColorAttributeName
,但它不起作用。
答案 0 :(得分:2)
虽然没有公共API可以做到这一点,但我很好奇并决定深入研究UITextField
UITextField
。我发现_sharedHighlightView
_sharedHighlightView
上有一个类方法,它返回私有private header类的实例。这是负责突出显示的班级。 Swizzling 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!
}
}
并更改其颜色将允许您更改任何数据检测链接的颜色:
警告:这是一个使用方法调配和私有API /属性的黑客。
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)
在视图控制器中:
results = [max(x,y) for x,y in zip(location1, location2)]
total = sum(results)
结果:
这可能会通过不强行解开任何选项来进一步清理。
答案 1 :(得分:1)
检测到的链接的选定颜色或突出显示颜色没有文档属性,但您应该能够通过覆盖委托方法textView:shouldInteractWithURL:inRange:
并自行更改颜色来实现相同的效果。
来自UITextViewDelegate协议参考:
如果用户点击或长按,则文本视图会调用此方法 网址链接。此方法的实现是可选的。默认情况下 文本视图打开负责处理URL类型的应用程序 并传递URL。您可以使用此方法来触发 替代操作,例如在URL中显示Web内容 当前应用程序中的Web视图。
最后一个参数是名为characterRange
的NSRange对象,它表示包含抽头URL(或主题标签)的字符范围。使用该范围,您应该能够添加NSForegroundColorAttributeName
等属性,以便仅更改已点击的特定主题标签的颜色。
您可能希望还原touchesEnded
和touchesCancelled
上的所有更改。
答案 2 :(得分:-1)
可以解决此问题,您可以使用UIButton而不是textview。通过使用按钮,您可以获得相同的效果。