动态更新 UITextView autocapitalizationType

nat*_*ate 4 cocoa-touch uitextview ios swift

我有一个带有 UITextView 的空白测试应用程序,并且添加了此委托方法:

func textViewDidChange(textView: UITextView) {
    if textView.text.hasPrefix("Cap") {
        textView.autocapitalizationType = .AllCharacters
    } else {
        textView.autocapitalizationType = .Sentences
    }
}
Run Code Online (Sandbox Code Playgroud)

如果用户在文本开头键入“Cap”,我希望 textView 更改为 .AllCharacters autocapitalizationType。如果他们删除该前缀,它应该变回句子。

该代码被调用但不被执行,并且键盘不会改变以反映这一点。知道如何推动 textView 来更新大写字母吗?

Rap*_*ira 5

非常有趣的问题。事实上,autocapitalizationType当键盘存在时,它不会改变,但你可以通过放弃它并使其再次成为第一响应者来推动它:

textView.autocapitalizationType = .AllCharacters
// slow operation
textView.resignFirstResponder() 
textView.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)

问题是这个过程很慢,所以你会感觉到每个角色之间有很大的延迟,所以你应该执行一次这个操作。

func textViewDidChange(textView: UITextView) {
    if textView.text.hasPrefix("Cap") {
        if textView.autocapitalizationType != .AllCharacters {
            textView.autocapitalizationType = .AllCharacters
            textView.resignFirstResponder()
            textView.becomeFirstResponder()
        }
    } else {
        textView.autocapitalizationType = .Sentences
    }
} 
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。