UITextView光标颜色不改变iOS 7

时间:2014-05-18 18:42:18

标签: ios objective-c swift uitextview

我正在尝试根据用户的偏好设置UITextView的光标颜色。他们用按钮选择他们想要的颜色。

默认情况下,textview的光标颜色为白色。当用户按下按钮时,它可能会变为绿色:

    [_textView setTintColor:[UIColor greenColor]];
    [_textView setTextColor:[UIColor greenColor]];

我确信此方法调用正常,因为textview的文本会改变颜色,而不是光标......

3 个答案:

答案 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()

然后你不需要处理键盘传入和传出。