iOS 9 中隐藏 UIWebView 的快捷键盘栏
Hide shortcut keyboard bar for UIWebView in iOS 9
我正在为 iOS 开发 PhoneGap 应用程序,我需要删除新的 iOS 9 快捷栏。现在我在 - (void)viewDidLoad
方法
中执行以下操作
if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
这会隐藏 undo/redo 和 copy/paste 按钮,但快捷方式栏仍显示在键盘上并且上面有导航按钮。
怎样才能完全去掉快捷栏。
感谢您的帮助!
*** 更新 1 ***
我的完整工作代码如下。希望这可以帮助某人(感谢@Clement 回复)
#import <objc/runtime.h>
- (void) hideKeyboardShortcutBar: (UIView *)view
{
for (UIView *sub in view.subviews) {
[self hideKeyboardShortcutBar:sub];
if ([NSStringFromClass([sub class]) isEqualToString:@"UIWebBrowserView"]) {
Method method = class_getInstanceMethod(sub.class, @selector(inputAccessoryView));
IMP newImp = imp_implementationWithBlock(^(id _s) {
if ([sub respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [sub inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
return nil;
});
method_setImplementation(method, newImp);
}
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self hideKeyboardShortcutBar:self.webView];
}
此技巧将隐藏 undo/redo 和导航按钮。但是自动预测文本仍然会显示在键盘上。要完全隐藏快捷栏,请将 html 属性添加到您的输入元素
<input autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
P.S 我的应用程序正在审核中。还是不知道苹果会不会批准。
*** 更新 2 ***
我的应用已获得 Apple 批准
使用 method swiziling 我们可以删除键盘快捷键栏(仅适用于 ObjC)。
- (void)hideKeyboardShortcutBar
{
Class webBrowserClass = NSClassFromString(@"UIWebBrowserView");
Method method = class_getInstanceMethod(webBrowserClass, @selector(inputAccessoryView));
IMP newImp = imp_implementationWithBlock(^(id _s) {
if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
return nil;
});
method_setImplementation(method, newImp);
}
inputAccessoryView
: This property is typically used to attach an accessory view to the
system-supplied keyboard that is presented for UITextField and
UITextView objects.
所以每次弹出键盘时都会触发新的实现块。
更新
要从 WKWebView
中删除附属视图,请使用 WKContentView
而不是 UIWebBrowserView
我正在为 iOS 开发 PhoneGap 应用程序,我需要删除新的 iOS 9 快捷栏。现在我在 - (void)viewDidLoad
方法
if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
这会隐藏 undo/redo 和 copy/paste 按钮,但快捷方式栏仍显示在键盘上并且上面有导航按钮。
怎样才能完全去掉快捷栏。
感谢您的帮助!
*** 更新 1 ***
我的完整工作代码如下。希望这可以帮助某人(感谢@Clement 回复)
#import <objc/runtime.h>
- (void) hideKeyboardShortcutBar: (UIView *)view
{
for (UIView *sub in view.subviews) {
[self hideKeyboardShortcutBar:sub];
if ([NSStringFromClass([sub class]) isEqualToString:@"UIWebBrowserView"]) {
Method method = class_getInstanceMethod(sub.class, @selector(inputAccessoryView));
IMP newImp = imp_implementationWithBlock(^(id _s) {
if ([sub respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [sub inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
return nil;
});
method_setImplementation(method, newImp);
}
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self hideKeyboardShortcutBar:self.webView];
}
此技巧将隐藏 undo/redo 和导航按钮。但是自动预测文本仍然会显示在键盘上。要完全隐藏快捷栏,请将 html 属性添加到您的输入元素
<input autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
P.S 我的应用程序正在审核中。还是不知道苹果会不会批准。
*** 更新 2 ***
我的应用已获得 Apple 批准
使用 method swiziling 我们可以删除键盘快捷键栏(仅适用于 ObjC)。
- (void)hideKeyboardShortcutBar
{
Class webBrowserClass = NSClassFromString(@"UIWebBrowserView");
Method method = class_getInstanceMethod(webBrowserClass, @selector(inputAccessoryView));
IMP newImp = imp_implementationWithBlock(^(id _s) {
if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
return nil;
});
method_setImplementation(method, newImp);
}
inputAccessoryView : This property is typically used to attach an accessory view to the system-supplied keyboard that is presented for UITextField and UITextView objects.
所以每次弹出键盘时都会触发新的实现块。
更新
要从 WKWebView
中删除附属视图,请使用 WKContentView
而不是 UIWebBrowserView