【问题标题】:How to toggle autocorrectionType on and off for an existing UITextView如何为现有的 UITextView 打开和关闭 autocorrectionType
【发布时间】:2011-10-15 14:42:55
【问题描述】:

我的 iPhone 应用程序中有一个 UITextView,我希望能够为其切换自动更正类型。

当用户编辑文本视图时,我希望将 autocorrectionType 设置为 UIAutocorrectionTypeYes。 当不编辑文本视图时,我希望将 autocorrectionType 设置为 UIAutocorrectionTypeNo(因为我不希望任何由自动更正生成的红点下划线可见)

只需像这样切换 autocorrectionType:

myTextView.autocorrectionType = UITextAutocorrectionTypeYes;
myTextView.autocorrectionType = UITextAutocorrectionTypeNo;

似乎不起作用。 何时可以切换 autocorrectionType 或更改后的 autocorrectionType 在什么情况下生效有限制吗?

编辑:

澄清: 初始化 UITextView 时设置 autocorrectionType 没有问题。当我想更改现有 UITextView 的 autocorrectionType 时,就会出现问题。在我的情况下,我想在用户编辑 UITextView 时为他们提供自动更正的优势,但不希望在未编辑 UITextView 时用红点下划线指出任何拼写错误 - 部分原因是我也在导出UIView 包含 UITextView 作为图像。 问题是仅仅改变我的 UITextView 的 autocorrectionType 属性的值是行不通的。

【问题讨论】:

  • 你应该使用 spellCheckingType 而不是 autocorrectionType 吗?

标签: objective-c cocoa-touch uitextview autocorrect


【解决方案1】:

对于图像导出方案,这是一种简单的方法:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    // Turn spell check on
    textView.autocorrectionType = UITextAutocorrectionTypeYes;
    return YES;
}


- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
    // Turn spell check off and clean up red squiggles.
    textView.autocorrectionType = UITextAutocorrectionTypeNo;
    NSString *currentText = textView.text;
    textView.text = @"";
    textView.text = currentText;
    return YES;
}

【讨论】:

    【解决方案2】:

    您可以尝试先隐藏键盘,然后再显示。还要更新uitextview。如果 [UITextView setNeedsDisplay] 对您不起作用,请尝试 [UITextView insertText:] 然后 [UITextView deleteBackward]

    [textView resignFirstResponde];
    textView.autocorrectionType = UITextAutocorrectionTypeNo;
    [textView becomeFirstResponder];
    [textView setNeedsDisplay];
    

    [textView insertText:@" "];
    [textView deleteBackward];
    

    【讨论】:

    • 这在 iOS8 中是否仍然有效 - 用户是否注意到键盘消失和出现?
    【解决方案3】:

    除了将自动更正类型更改为 UITextAutoCorrectionNo 之外,还必须强制 UITextView 重新评估其更正状态。 setNeedsRedraw 不够,但将文本设置为自身,例如

    textView.autocorrectionType = UITextAutocorrectionTypeNo;
    textView.text = textView.text;
    

    使红色虚线消失。注意:此解决方法依赖于未记录的行为,不保证适用于未来的 iOS 版本。

    【讨论】:

      【解决方案4】:

      更改autocorrectionType 后,尝试在文本视图上调用-setNeedsDisplay。这将强制文本视图重绘,并有望清除红色下划线。

      myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
      [myTextView setNeedsDisplay];
      

      【讨论】:

        【解决方案5】:
        func activateTextViewAutocorrection() {
        
            textView.autocorrectionType = .default
            textView.reloadInputViews()
        }
        
        func deactivateTextViewAutocorrection() {
        
            textView.autocorrectionType = .no
            textView.reloadInputViews()
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-01-12
          • 2014-03-09
          • 1970-01-01
          • 2013-05-06
          • 2016-01-22
          • 2015-06-05
          • 2020-10-18
          相关资源
          最近更新 更多