在 WKWebView 中隐藏键盘附件栏
Hiding Keyboard accessorybar in WKWebView
如何在WKWebview中隐藏键盘辅助栏?虽然有一些 UIWebView 的资源,但我在 Whosebug 上找不到 WkWebview 的资源。
相关:
- Removing the accesory item on the UIWebView keyboard
- iOS 7 UIWebView keyboard issue
这在 WKWebView
中是可能的 the method for swizzling out the inputAccessoryView
on UIWebView
。
首先,添加这个 class:
@interface _NoInputAccessoryView : NSObject
@end
@implementation _NoInputAccessoryView
- (id)inputAccessoryView {
return nil;
}
@end
接下来,添加这个方法:
- (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([_NoInputAccessoryView class], @selector(inputAccessoryView));
class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));
objc_registerClassPair(newClass);
}
object_setClass(targetView, newClass);
}
然后您所要做的就是调用该方法并传入您的 WKWebView
:
[self removeInputAccessoryViewFromWKWebView:webView];
注意:我还不确定这是否会通过应用审核,但它非常类似于我用于 UIWebView
的相同代码,并且确实通过了审核。
更新:此代码位于已通过 App Store 审核的应用中。
如何在WKWebview中隐藏键盘辅助栏?虽然有一些 UIWebView 的资源,但我在 Whosebug 上找不到 WkWebview 的资源。
相关:
- Removing the accesory item on the UIWebView keyboard
- iOS 7 UIWebView keyboard issue
这在 WKWebView
中是可能的 the method for swizzling out the inputAccessoryView
on UIWebView
。
首先,添加这个 class:
@interface _NoInputAccessoryView : NSObject
@end
@implementation _NoInputAccessoryView
- (id)inputAccessoryView {
return nil;
}
@end
接下来,添加这个方法:
- (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([_NoInputAccessoryView class], @selector(inputAccessoryView));
class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));
objc_registerClassPair(newClass);
}
object_setClass(targetView, newClass);
}
然后您所要做的就是调用该方法并传入您的 WKWebView
:
[self removeInputAccessoryViewFromWKWebView:webView];
注意:我还不确定这是否会通过应用审核,但它非常类似于我用于 UIWebView
的相同代码,并且确实通过了审核。
更新:此代码位于已通过 App Store 审核的应用中。