iOS 去除 Webview 鍵盤頂部工具欄

在默認情況下,iOS 使用 Webview 打開的網頁,在進行表單輸入時,彈出的鍵盤頂部會多出一個工具欄。
左邊有兩個上下按鈕,右邊有一個Done/完成按鈕。這是用來切換輸入框的,就像 PC 上按Tab鍵可以切換輸入框一樣。
為了讓 App 中嵌入的 H5 更接近 Native,咱們可以去掉它。

UIWebView

UIWebView,可以使用[self hideKeyboardShortcutBar:self.webView]去掉工具欄。

- (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);
            
        }
    }
}

WKWebView

WKWebView,可以使用[self hideWKWebviewKeyboardShortcutBar:self.webView]去掉工具欄。

// 步驟一:創(chuàng)建一個 _NoInputAccessoryView
@interface _NoInputAccessoryView : NSObject
@end
@implementation _NoInputAccessoryView
- (id)inputAccessoryView {
    return nil;
}
@end

// 步驟二:去掉 WkWebviewe Done 工具欄
- (void) hideWKWebviewKeyboardShortcutBar:(WKWebView *)webView {
    UIView *targetView;
    
    for (UIView *view in webView.scrollView.subviews) {
        if([[view.class description] hasPrefix:@"WKContent"]) {
            targetView = view;
        }
    }
    if (!targetView) {
        return;
    }
    NSString *noInputAccessoryViewClassName = [NSString stringWithFormat:@"%@_NoInputAccessoryView", targetView.class.superclass];
    Class newClass = NSClassFromString(noInputAccessoryViewClassName);
    
    if(newClass == nil) {
        newClass = objc_allocateClassPair(targetView.class, [noInputAccessoryViewClassName cStringUsingEncoding:NSASCIIStringEncoding], 0);
        if(!newClass) {
            return;
        }
        
        Method method = class_getInstanceMethod([_NoInputAccessoryView class], @selector(inputAccessoryView));
        
        class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));
        
        objc_registerClassPair(newClass);
    }
    
    object_setClass(targetView, newClass);
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • iOS開發(fā)系列--網絡開發(fā) 概覽 大部分應用程序都或多或少會牽扯到網絡開發(fā),例如說新浪微博、微信等,這些應用本身可...
    lichengjin閱讀 4,058評論 2 7
  • 隨著中國經濟的發(fā)展,中國人的生活水平也有了很大的提升,這自然引起服務行業(yè)的變革。家政行業(yè)正是一個由冷門轉變?yōu)橹耸挚?..
    金策師財經閱讀 329評論 0 0
  • 時光,是最厲害的魔術師。 他把樹葉從無變到有,從有變到綠,從綠變到黃,從黃變的滿地飄落。 他把時光從陽春三月變到酷...
    南風魚兒閱讀 1,283評論 17 57
  • 今天是什么日子 起床:8:00 就寢:昨晚12:30 天氣:晴朗 心情:美美噠 紀念日:周六 任務清單 昨日完成的...
    櫻花海棠閱讀 258評論 0 1
  • 你喜歡我膩著你么 喜歡啊 哦?為什么 可能是因為孤單吧 輕輕的撫摸她的頭發(fā),讓她安穩(wěn)靠在我的懷里 可能這樣就有了對...
    阿虎的書房閱讀 249評論 0 1

友情鏈接更多精彩內容