在iOS 9中隐藏UIWebView的快捷键盘栏 [英] Hide shortcut keyboard bar for UIWebView in iOS 9

查看:1392
本文介绍了在iOS 9中隐藏UIWebView的快捷键盘栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为iOS开发PhoneGap应用程序,我需要摆脱新的iOS 9快捷栏。现在我在 - (void)viewDidLoad 方法中执行以下操作

  if([self.webView respondingToSelector:@selector(inputAssistantItem)]){
UITextInputAssistantItem * inputAssistantItem = [self.webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @ [];
inputAssistantItem.trailingBarButtonGroups = @ [];
}

这隐藏了撤消/重做和复制/粘贴按钮,但快捷键仍然显示键盘,并在其上有导航按钮。





如何彻底摆脱快捷键。



感谢您的帮助!




$
*** 更新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 = class_getInstanceMethod(sub.class,@selector(inputAccessoryView));
IMP newImp = imp_implementationWithBlock(^(id _s){
if([sub respondingToSelector:@selector(inputAssistantItem)]){
UITextInputAssistantItem * inputAssistantItem = [sub inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @ [];
inputAssistantItem.trailingBarButtonGroups = @ [];
}
return nil;
});
method_setImplementation(method,newImp);

}
}
}

- (void)viewDidLoad
{
[super viewDidLoad];

[self hideKeyboardShortcutBar:self.webView];
}

此技巧将隐藏撤消/重做和导航按钮。但是自动预测文本仍然会显示在键盘上。要隐藏快捷键,请完全向输入元素添加html属性

 < input autocomplete =offautocorrect =offautocapitalize =offspellcheck =false/> 

P.S我的应用程序正在审核中。仍然不知道苹果是否会批准这个。





*** UPDATE 2 ***


我的应用程式已获Apple批准

解决方案

使用方法swiziling我们可以删除键盘快捷栏(只适用于ObjC)。

   - (void)hideKeyboardShortcutBar 
{
Class webBrowserClass = NSClassFromString(@UIWebBrowserView);
方法method = class_getInstanceMethod(webBrowserClass,@selector(inputAccessoryView));

IMP newImp = imp_implementationWithBlock(^(id _s){
if([self.webView respondingToSelector:@selector(inputAssistantItem)]){
UITextInputAssistantItem * inputAssistantItem = [self。 webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @ [];
inputAssistantItem.trailingBarButtonGroups = @ [];
}
return nil;
});

method_setImplementation(method,newImp);
}




inputAccessoryView
:此属性通常用于将附件视图附加到为UITextField和
UITextView对象显示的
系统提供的键盘。


$



UPDATE p>

要从 WKWebView 中删除​​辅助视图,请使用 WKContentView UIWebBrowserView


I'm developing PhoneGap application for iOS and I need to get rid of new iOS 9 shortcut bar. Now I'm doing the following in the - (void)viewDidLoad method

if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) {
    UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem];
    inputAssistantItem.leadingBarButtonGroups = @[];
    inputAssistantItem.trailingBarButtonGroups = @[];
}

This hides undo/redo and copy/paste buttons but shortcut bar still presented on keyboard and has navigation buttons on it.

How can I get rid of shortcut bar completely.

Thanks for your help!


*** UPDATE 1 ***

My full working code is below. Hope this can help someone (thanks to @Clement reply)

#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];
}

This trick will hide undo/redo and navigation buttons. But auto-prediction text still will be shown on keyboard. To hide shortcut bar completely add html attributes to your input element

<input autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />

P.S My app is on the review now. Still don't know if Apple will approve this.


*** UPDATE 2 ***

My app was approved by Apple

解决方案

Using method swiziling we can remove the keyboard shortcut bar (only works with 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.

So the new implementation block will be fired every time the keyboard pops up.

UPDATE

To remove the accessory view from WKWebView use WKContentView instead of UIWebBrowserView

这篇关于在iOS 9中隐藏UIWebView的快捷键盘栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆