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


68

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

是否可以通过某种方式或仅用户可以在设备设置中将其关闭?

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


1
我不知道你是否可以,但这似乎不是一个好主意。我使用的应用程序在Android上执行类似的操作,这确实令人沮丧。我认为最好解决此问题,以使用户可以决定是否需要这些建议。
哈桑2014年

1
@Hassan我的问题是,它破坏了我的UI,所以我想隐藏/禁用任何建议。
rihe 2014年

是的,但是如果您可以向上移动文本视图以容纳键盘,而不是隐藏建议,那会更好吗?再次致歉,因为我实际上并不知道该怎么做,我只是提出了一个友好的建议。
哈桑2014年

2
也许您可以尝试此答案。设置通知方法,并在键盘高度变化时相应地移动文本视图。我不知道这是否可以在iOS 8中使用。
哈桑

Answers:


127

您可以为UITextView禁用键盘建议/ autocomplete / 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
    }
}

2
UITextAutocorrectionTypeNo在iphone 6中
不起作用-iOS

2
@iGW当我在UITextView或UITextField已经成为firstResponder之后执行此操作时,它对我也不起作用。尝试在此之前进行设置,或触发辞职并成为FirstResponder(前者显然是“正确”且更合适的方法。)
J_S 2015年

给定一个UIWebView,如何获取对textView的引用?
Maximus S

2
仅供参考,对于Swift,代码为textField.autocorrectionType = .No
Rob Reuss

对于Responder该实现的任何子类,可以实现UIKeyInput该变量的getter方法,UITextAutocorrectionTypeNo以在不使用时返回以实现相同的效果UITextField
bshirley

53

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

要在UITextField或上禁用键盘建议UITextView,请Attributes Inspector设置CorrectionNo

在此处输入图片说明


这对我没有用。执行此操作时,键盘上仍显示QuickType建议。但是程序化答案确实对我有用。
Mike S

奇怪的是,这对您不起作用,因为实际上它设置autocorrectionTypeUITextAutocorrectionTypeNo。您在代码中所做的同样的事情。您能否仔细检查一下,如果行为没有改变,请告诉我您使用的是Xcode和iOS的哪个版本?
Nikita Kukushkin 2014年

我在项目中将此设置为“否”,并且它仍显示在Swype定制键盘上。
Almo 2015年

我还没有找到一种方法来使Swype键盘关闭该部分。顺便说一句,那东西是巨大的。我必须让我的代码查询它的大小并为此调整它的动画。
Almo 2015年

7

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

- (void)disableQuickTypeBar:(BOOL)disable
{
    self.autocorrectionType = disable ? UITextAutocorrectionTypeNo : UITextAutocorrectionTypeDefault;

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

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



1

在Swift 4.x中:

myUTTextField.autocorrectionType = .no

0

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

textView.autocorrectionType = .no

但我也注意到人们在努力使自动完成栏换掉而苦苦挣扎,因为如果在更改其autocorrectionType时textView已经是firstResponder,它将不会更新键盘。无需尝试将firstResponder状态重新分配并重新分配给textView来实现更改,您只需调用:

textView.reloadInputViews()

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.