在 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 对于任何实现UIKeyInput
的Responder
的子类,可以实现该变量的getter方法返回UITextAutocorrectionTypeNo
,在不使用UITextField
时达到同样的效果。跨度>
【参考方案2】:
为了完整起见,我想补充一点,您也可以在 Interface Builder
中执行此操作。
要禁用 UITextField
或 UITextView
上的键盘建议 — 在 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 studio上以编程方式检查自动启动权限是启用还是禁用