我正在为iOS开发PhoneGap应用程序,我需要在键盘上禁用自动预测文本。
我为UITextView
找到了很多像这样的解决方案:
Disable iOS8 Quicktype Keyboard programmatically on UITextView
ios8 xcode how to remove QuickType on UIKeyboard ( auto complete / auto suggest )
...但PhoneGap应用内有UIWebBrowserView
。
我也知道用于禁用自动预测的html属性。它们仅适用于常规html输入,但我contenteditable
上有UIWebBrowserView
元素,这是文本编辑器的可编辑区域(在我的例子中是CKEditor)。
<!-- Does not work -->
<div contenteditable="true" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
</div>
那么,有没有办法在iOS上以编程方式禁用contenteditable元素的自动预测功能?
非常感谢任何帮助!
答案 0 :(得分:3)
我最近在托管UIWebView的本机应用程序(而非PhoneGap)中遇到了此问题,但无法通过更改HTML来解决此问题。我建议向Apple提交一个错误。
我能够强制键盘显示无法使用相当复杂的方案的QuickType,我肯定不会通过App Store指南:
1)留意UIKeyboardWillShowNotification
次通知
2)当键盘出现时,找到第一个响应者 - 这将是UIWebView
3)动态子类化此视图以提供textInputTraits
方法的替代实现(返回符合UITextInputTraits
的对象)。将此返回对象的autocorrectionType
设置为UITextAutocorrectionTypeNo
。
4)在第一个响应者视图上调用reloadInputViews
- 两次。
我意识到所有这些都不可能帮助您或解决您的具体问题,但也许它会帮助某人。
答案 1 :(得分:1)
我发现的唯一方法是使用私有API:
UIWebBrowserView *browserView = _myBrowserView;
NSString *spellChecking =@"setContinuousSpellCheckingEnabled:";
SEL enableSpellCheckingSelector = NSSelectorFromString(spellChecking);
NSMethodSignature* signature = [[browserView class] instanceMethodSignatureForSelector:enableSpellCheckingSelector];
if (!signature)
return;
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:browserView];
[invocation setSelector:enableSpellCheckingSelector];
[invocation setArgument:&enabled atIndex:2];
[invocation invoke];
它适用于iOS7和iOS8。
然而,有了这样的伎俩,你可能无法通过Apple的评论。
答案 2 :(得分:0)
方法调整可能会有所帮助。
1.创建catogory:UITextView + CloseQuickType.h&amp;的UITextView + CloseQuickType.m
3.UITextView + CloseQuickType.m:
#import "UITextView+CloseQuickType.h"
#import <objc/runtime.h>
#import "JRSwizzle.h"
@implementation UITextView (CloseQuickType)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//exchange init methods
[self jr_swizzleMethod:@selector(init) withMethod:@selector(init_) error:nil];
[self jr_swizzleMethod:@selector(initWithFrame:) withMethod:@selector(initWithFrame_:) error:nil];
[self jr_swizzleMethod:@selector(initWithCoder:) withMethod:@selector(initWithCoder_:) error:nil];
});
}
#pragma mark - myInitMethods
- (instancetype)init_ {
self = [self init_];
if (self) {
self.autocorrectionType = UITextAutocorrectionTypeNo;
}
return self;
}
- (instancetype)initWithFrame_:(CGRect)frame {
self = [self initWithFrame_:frame];
if (self) {
self.autocorrectionType = UITextAutocorrectionTypeNo;
}
return self;
}
- (instancetype)initWithCoder_:(NSCoder *)aDecoder {
self = [self initWithCoder_:aDecoder];
if (self) {
self.autocorrectionType = UITextAutocorrectionTypeNo;
}
return self;
}
@end
4.运行申请。
PS:我试过了
[[UITextView appearance] setAutocorrectionType:UITextAutocorrectionTypeNo];
更改默认设置但在Xcode7,ios9中崩溃。