动态更新UITextView autocapitalizationType

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态更新UITextView autocapitalizationType相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

非常有趣的问题。实际上,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
    
 

我希望有帮助。

另一答案

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

以上是关于动态更新UITextView autocapitalizationType的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 动态改变大小

具有动态高度的 UITextView

为啥 UITextView 高度仅在滚动时变为动态?

动态 UITableViewCell 高度内的动态 UITextView?

动态 UIScrollView 中的动态 UITextView - iOS

如何动态调整 UITextView 的高度