动态更新UITextView autocapitalizationType

问题描述 投票:2回答:2

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

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

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

代码被调用但不被接受,键盘也没有变化以反映这一点。我知道如何微调textView来更新大写吗?

ios swift cocoa-touch uitextview
2个回答
4
投票

非常有趣的问题。实际上,autocapitalizationType不会在有键盘的情况下发生变化,但是您可以通过辞职并再次使其成为第一响应方来nudge它:]

textView.autocapitalizationType = .AllCharacters
// slow operation
textView.resignFirstResponder() 
textView.becomeFirstResponder()

问题是此过程很慢,因此每个字符之间会有很大的延迟,因此您应该执行一次此操作。

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

我希望有帮助。


0
投票

辞退第一响应者以强制执行autocapitalizationType更改不是很干净。而是在更改autocapitalizationType后调用UITextView.reloadInputViews()。键盘保持打开状态,并使用新的autocapitalizationType值。根据reloadInputViews()文档:

© www.soinside.com 2019 - 2024. All rights reserved.