在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘

Posted

技术标签:

【中文标题】在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘【英文标题】:Disable iOS8 Quicktype Keyboard programmatically on UITextView 【发布时间】:2014-09-20 17:09:32 【问题描述】:

我正在尝试更新具有聊天界面的 ios8 应用程序,但新的 Quicktype 键盘隐藏了文本视图,因此我想以编程方式或在界面生成器中将其关闭。

是否有可能以某种方式或只有用户可以在设备设置中将其关闭?

我知道有一个问题/答案可以用UITextfield 解决这个问题,但我需要用UITextView 来解决这个问题。

【问题讨论】:

我不知道你能不能,但这似乎不是一个好主意。我使用了一个在 android 上做类似事情的应用程序,这真的很令人沮丧。我认为最好解决它以允许用户决定是否需要这些建议。 @Hassan 我的问题是,它破坏了我的用户界面,所以我想隐藏/禁用任何建议。 是的,但是如果您可以将文本视图向上移动以适应键盘,而不是隐藏建议不是更好吗?再次道歉,因为我实际上不知道该怎么做,我只是提出一个友好的建议。 也许你可以试试this answer。设置通知方法,并在键盘高度发生变化时相应地移动文本视图。我不知道这是否适用于 iOS 8。 ios8 xcode how to remove QuickType on UIKeyboard ( auto complete / auto suggest )的可能重复 【参考方案1】:

您可以禁用 UITextView 的键盘建议/自动完成/ QuickType,这可以阻止像 4S 这样的小屏幕上的文本,如本例所示

下面一行:

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;

如果您只想在特定屏幕上执行此操作,例如定位 4S

if([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    if (screenHeight == 568) 
        // iphone 5 screen
    
    else if (screenHeight < 568) 
       // smaller than iphone 5 screen thus 4s
    

【讨论】:

UITextAutocorrectionTypeNo 在 iphone 6 - iOS 8.1 中不起作用 @iGW 当我在 UITextView 或 UITextField 已经是 firstResponder 之后执行此操作时,它也对我不起作用。尝试在此之前设置它,或者触发辞职并成为FirstResponder(前者显然是“正确”且更合适的方式。 在给定 UIWebView 的情况下,如何获取对 textView 的引用? 仅供参考,对于 Swift,代码是 textField.autocorrectionType = .No 对于任何实现UIKeyInputResponder的子类,可以实现该变量的getter方法返回UITextAutocorrectionTypeNo,在不使用UITextField时达到同样的效果。跨度> 【参考方案2】:

为了完整起见,我想补充一点,您也可以在 Interface Builder 中执行此操作。

要禁用 UITextFieldUITextView 上的键盘建议 — 在 Attributes Inspector 中将 Correction 设置为 No

【讨论】:

这对我不起作用。当我这样做时,仍然会为我的键盘显示 QuickType 建议。但是程序化的答案确实对我有用。 奇怪的是,这对你不起作用,因为它所做的基本上是将autocorrectionType 设置为UITextAutocorrectionTypeNo。你在代码中做同样的事情。您能否仔细检查一下,如果行为没有改变,请告诉我您使用的是什么版本的 Xcode 和 iOS? 我在我的项目中将此设置为否,但它仍然显示在 Swype 自定义键盘上。 我还没有找到让 Swype 键盘关闭该部分的方法。顺便说一句,那东西是巨大的。我必须让我的代码查询它的大小并为此调整它的动画。【参考方案3】:

我已经使用以下方法创建了一个 UITextView 类别类:

- (void)disableQuickTypeBar:(BOOL)disable

    self.autocorrectionType = disable ? UITextAutocorrectionTypeNo : UITextAutocorrectionTypeDefault;

    if (self.isFirstResponder) 
        [self resignFirstResponder];
        [self becomeFirstResponder];
    

我希望有一个更清洁的方法。此外,它假定自动更正模式为Default,这对于每个文本视图可能并不总是正确的。

【讨论】:

【参考方案4】:

在 Swift 2 中:

myUITextField.autocorrectionType = UITextAutocorrectionType.No

【讨论】:

【参考方案5】:

在 Swift 4.x 中:

myUTTextField.autocorrectionType = .no

【讨论】:

【参考方案6】:

正如其他人所说,您可以使用:

textView.autocorrectionType = .no

但我也注意到人们在实际更换自动完成栏时遇到了困难,因为如果 textView 在您更改其自动更正类型时已经是 firstResponder,它不会更新键盘。无需尝试辞职并将 firstResponder 状态重新分配给 textView 以实现更改,您可以简单地调用:

textView.reloadInputViews()

这应该隐藏自动完成栏。见https://developer.apple.com/documentation/uikit/uiresponder/1621110-reloadinputviews

【讨论】:

以上是关于在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android上以编程方式启用或禁用GPS?

如何在android studio上以编程方式检查自动启动权限是启用还是禁用

如何在Android 6.x上以编程方式启用或禁用GPS?

可以在每个会话的基础上以编程方式启用/禁用 DPI 缩放吗?

在 iOS 上以编程方式向按钮添加操作

在 iOS 13 上以编程方式滚动 SwiftUI ScrollView