【问题标题】:Updating UITextView autocapitalizationType dynamically动态更新 UITextView autocapitalizationType
【发布时间】:2016-01-21 03:16:51
【问题描述】:

我有一个带有 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


    【解决方案1】:

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

    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
        }
    } 
    

    希望对你有帮助。

    【讨论】:

    • 这确实有效,但不幸的是,它对于生产应用程序来说并不可行,因为它既慢又昂贵。我认为这可能是我唯一的选择,所以如果我没有得到任何其他答案,我会将其标记为正确。谢谢!
    • 即使是第二种方法对你来说也很慢@ntesler?我在这里测试过,很好,因为当大写类型已经是.AllCharacters时,它没有触发辞职/成为第一响应者。
    • 绝对是一个改进。我有大量在 textViewDidBegin/EndEditing 中执行的代码,但是当我使用此解决方法时,我可以阻止它执行,这应该会有所帮助。我会在 Instruments 中再次检查,在调用它时系统不会做任何代价太大的事情。
    【解决方案2】:

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

    当当前对象为第一响应者时,您可以使用此方法刷新与当前对象关联的自定义输入视图或输入附件视图。视图会立即被替换——也就是说,不会将它们设置为动画。

    这正是我临时选择键盘上的 shift 键所需要的。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多