UITextView光标颜色不改变iOS 7

Apo*_*llo 11 objective-c uitextview ios swift

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

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

    [_textView setTintColor:[UIColor greenColor]];
    [_textView setTextColor:[UIColor greenColor]];
Run Code Online (Sandbox Code Playgroud)

我确信这个方法调用是有效的,因为textview的文本改变颜色,而不是光标...

Vik*_*ica 22

我能够重新创建您的行为:如果我在未选择文本视图时更改色调和文本颜色(也就是:不是第一响应者),一切都将按预期工作.

但是如果我先选择它,通过点击它而不是通过按下按钮来改变颜色,它们的插入符号(色调)颜色不会改变.

这是一个解决方法:

- (IBAction)changeColor:(id)sender 
{
    [_textView setTextColor:[UIColor greenColor]];
    [_textView setTintColor:[UIColor greenColor]];

    if([_textView isFirstResponder]){
        [_textView resignFirstResponder];
        [_textView becomeFirstResponder];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我有受键盘外观转换影响的视图,上面的resign/become调用会导致一些不良行为.我能够通过包装这样的调用来消除这种情况:`[UIView setAnimationsEnabled:NO]; [_textView resignFirstResponder]; [_textView becomeFirstResponder]; [UIView setAnimationsEnabled:YES];` (2认同)

dr *_* OX 5

我在 UITextViewDelegate 方法中使用了小技巧:

func textViewDidBeginEditing(_ textView: UITextView) {
    let color = textView.tintColor
    textView.tintColor = .clear
    textView.tintColor = color
}
Run Code Online (Sandbox Code Playgroud)

UPD

更科技的方式:

1) 在扩展中实现方法:

extension UITextView {
    func resetTintColor(){
        let color = tintColor
        tintColor = .clear
        tintColor = color
    }
}
Run Code Online (Sandbox Code Playgroud)

2) 在 UITextViewDelegate 实现中:

func textViewDidBeginEditing(_ textView: UITextView) {
    textView.resetTintColor()
}
Run Code Online (Sandbox Code Playgroud)