iOS去除Webview键盘顶部工具栏的方法
前言
在默认情况下,iOS使用Webview打开的网页,在进行表单输入时,弹出的键盘顶部会多出一个工具栏。
左边有两个上下按钮,右边有一个Done/完成按钮。这是用来切换输入框的,就像PC上按Tab键可以切换输入框一样。
为了让App中嵌入的H5更接近Native,咱们可以去掉它。
UIWebView
UIWebView,可以使用[selfhideKeyboardShortcutBar:self.webView]去掉工具栏。
-(void)hideKeyboardShortcutBar:(UIView*)view
{
for(UIView*subinview.subviews){
[selfhideKeyboardShortcutBar:sub];
if([NSStringFromClass([subclass])isEqualToString:@"UIWebBrowserView"]){
Methodmethod=class_getInstanceMethod(sub.class,@selector(inputAccessoryView));
IMPnewImp=imp_implementationWithBlock(^(id_s){
if([subrespondsToSelector:@selector(inputAssistantItem)]){
UITextInputAssistantItem*inputAssistantItem=[subinputAssistantItem];
inputAssistantItem.leadingBarButtonGroups=@[];
inputAssistantItem.trailingBarButtonGroups=@[];
}
returnnil;
});
method_setImplementation(method,newImp);
}
}
}
WkWebView
WkWebView,可以使用[selfhideWKWebviewKeyboardShortcutBar:self.webView]去掉工具栏。
//步骤一:创建一个_NoInputAccessoryView
@interface_NoInputAccessoryView:NSObject
@end
@implementation_NoInputAccessoryView
-(id)inputAccessoryView{
returnnil;
}
@end
//步骤二:去掉WkWebvieweDone工具栏
-(void)hideWKWebviewKeyboardShortcutBar:(WKWebView*)webView{
UIView*targetView;
for(UIView*viewinwebView.scrollView.subviews){
if([[view.classdescription]hasPrefix:@"WKContent"]){
targetView=view;
}
}
if(!targetView){
return;
}
NSString*noInputAccessoryViewClassName=[NSStringstringWithFormat:@"%@_NoInputAccessoryView",targetView.class.superclass];
ClassnewClass=NSClassFromString(noInputAccessoryViewClassName);
if(newClass==nil){
newClass=objc_allocateClassPair(targetView.class,[noInputAccessoryViewClassNamecStringUsingEncoding:NSASCIIStringEncoding],0);
if(!newClass){
return;
}
Methodmethod=class_getInstanceMethod([_NoInputAccessoryViewclass],@selector(inputAccessoryView));
class_addMethod(newClass,@selector(inputAccessoryView),method_getImplementation(method),method_getTypeEncoding(method));
objc_registerClassPair(newClass);
}
object_setClass(targetView,newClass);
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。