UIWebView || WKWebView 中UIKeyBoard的 accessoryBar處理

在UIWebView || WKWebView 中你會(huì)意外的發(fā)現(xiàn)web頁(yè)面,input獲取焦點(diǎn)彈出系統(tǒng)虛擬鍵盤時(shí),擋住input,開始以為是我使用了IQKeyboardManager該庫(kù)導(dǎo)致鍵盤帶有 toolBar 顯示,但是我已經(jīng)在該類中禁止了該庫(kù)的使用,接下來又寫了個(gè)demo 發(fā)現(xiàn)了確實(shí)不是該庫(kù)引起的問題,最終發(fā)現(xiàn)其是UIWebView鍵盤的accessoryBar自帶的,蘋果官方并沒有給出方法,所以我們只能夠自己來解決。有些方案大家可以上 https://stackoverflow.com 上查找相對(duì)比較多答案及準(zhǔn)確性更高。

場(chǎng)景圖示如下:

accessoryBar顯示標(biāo)示圖

由于本人使用的是 WKWebView 下面就把相關(guān)的代碼提供給大家參靠

建立一個(gè) Nsobject 類

.h 文件

#import <Foundation/Foundation.h>
#import <WebKit/WebKit.h>

@interface NoInputAccessoryView : NSObject

- (void)removeInputAccessoryViewFromWKWebView:(WKWebView *)webView;


@end

.m 文件

#import "NoInputAccessoryView.h"
#import "BasewebViewController.h"

@implementation NoInputAccessoryView
- (id)inputAccessoryView {
    return nil;
}

- (void)removeInputAccessoryViewFromWKWebView:(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([BasewebViewController class], @selector(inputAccessoryView));
        
        class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));
        
        objc_registerClassPair(newClass);
    }
    object_setClass(targetView, newClass);
}
@end

類中調(diào)用方式:

   NoInputAccessoryView *noInputAccessoryView = [NoInputAccessoryView new];
   [noInputAccessoryView removeInputAccessoryViewFromWKWebView:_WebView];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容