解决方法
我们用一些Objective C运行时欺骗来删除这个吧.
@interface _SwizzleHelper : NSObject @end @implementation _SwizzleHelper -(id)inputAccessoryView { return nil; } @end
一旦我们有一个网页视图,我们要从中删除该栏,我们迭代其滚动视图的子视图,并使用UIWebDocumentView类.然后,我们动态地将上面创建的类的超类作为子视图的类(UIWebDocumentView – 但是我们不能说这是因为这是私有API),并将子视图的类替换为我们的类.
#import "objc/runtime.h" -(void)__removeInputAccessoryView { UIView* subview; for (UIView* view in self.scrollView.subviews) { if([[view.class description] hasPrefix:@"UIWeb"]) subview = view; } if(subview == nil) return; Nsstring* name = [Nsstring stringWithFormat:@"%@_SwizzleHelper",subview.class.superclass]; Class newClass = NSClassFromString(name); if(newClass == nil) { newClass = objc_allocateClasspair(subview.class,[name cStringUsingEncoding:NSASCIIStringEncoding],0); if(!newClass) return; Method method = class_getInstanceMethod([_SwizzleHelper class],@selector(inputAccessoryView)); class_addMethod(newClass,@selector(inputAccessoryView),method_getImplementation(method),method_getTypeEncoding(method)); objc_registerClasspair(newClass); } object_setClass(subview,newClass); }
相当于以上的Swift 3.0:
import UIKit import ObjectiveC var swizzledClassMapping = [AnyClass]() extension UIWebView { func noInputAccessoryView() -> UIView? { return nil } public func removeInputAccessoryView() { var subview: AnyObject? for (_,view) in scrollView.subviews.enumerated() { if NsstringFromClass(type(of: view)).hasPrefix("UIWeb") { subview = view } } guard subview != nil else { return } //Guard in case this method is called twice on the same webview. guard !(swizzledClassMapping as NSArray).contains(type(of: subview!)) else { return; } let className = "\type(of: subview!)_SwizzleHelper" var newClass : AnyClass? = NSClassFromString(className) if newClass == nil { newClass = objc_allocateClasspair(type(of: subview!),className,0) guard newClass != nil else { return; } let method = class_getInstanceMethod(type(of: self),#selector(UIWebView.noInputAccessoryView)) class_addMethod(newClass!,#selector(getter: UIResponder.inputAccessoryView),method_getTypeEncoding(method)) objc_registerClasspair(newClass!) swizzledClassMapping += [newClass!] } object_setClass(subview!,newClass!) } }
原文地址:https://www.jb51.cc/iOS/336289.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。