我正在尝试根据用户的偏好设置UITextView的光标颜色。他们用按钮选择他们想要的颜色。
默认情况下,textview的光标颜色为白色。当用户按下按钮时,它可能会变为绿色:
[_textView setTintColor:[UIColor greenColor]];
[_textView setTextColor:[UIColor greenColor]];
我确信此方法调用正常,因为textview的文本会改变颜色,而不是光标......
答案 0 :(得分:22)
我能够重新创建你的行为:如果我在未选择文本视图时更改色调和文本颜色(也就是:不是第一响应者),一切都将按预期工作。
但是,如果我先选择它,通过点击它而不是通过按下按钮来改变颜色,它们的插入符号(色调)颜色不会改变。
这是一种解决方法:
- (IBAction)changeColor:(id)sender
{
[_textView setTextColor:[UIColor greenColor]];
[_textView setTintColor:[UIColor greenColor]];
if([_textView isFirstResponder]){
[_textView resignFirstResponder];
[_textView becomeFirstResponder];
}
}
答案 1 :(得分:3)
我在UITextViewDelegate方法中使用小黑客:
func textViewDidBeginEditing(_ textView: UITextView) {
let color = textView.tintColor
textView.tintColor = .clear
textView.tintColor = color
}
<强> UPD 强>
更多技术方式:
1)实现扩展中的方法:
extension UITextView {
func resetTintColor(){
let color = tintColor
tintColor = .clear
tintColor = color
}
}
2)在UITextViewDelegate实现中:
func textViewDidBeginEditing(_ textView: UITextView) {
textView.resetTintColor()
}
答案 2 :(得分:2)
您可以使用
[_textView reloadInputViews];
在Swift中
textView. reloadInputViews()
然后你不需要处理键盘传入和传出。