在Swift中删除WKWebView Accesory栏 [英] Removing WKWebView Accesory bar in Swift
问题描述
我现在试着将
Michael Dautermann回答说得对,但为了隐藏附件栏,你需要调整UIView类的方法inputAccessoryView()使用_NoInputAccessoryView类的inputAccessoryView()。我刚刚在代码中添加了几行额外的行来完成方法调整的工作。
首先你需要一个假的类来交换
final class FauxBarHelper:NSObject {
var inputAccessoryView:AnyObject? {return nil}
}
然后在控制器类中创建此方法
///从网页视图中删除键盘配件视图
///来源:http://stackoverflow.com/a / 32620344/308315 / http://stackoverflow.com/a/33939584/308315
func _removeInputAccessoryView(webView:UIWebView){
var targetView:UIView? = nil
用于webView.scrollView.subviews中的视图{
if String(描述:type(of:view))。hasPrefix(WKContent){
targetView = view
}
}
guard let target = targetView else {return}
let noInputAccessoryViewClassName =\(target.superclass!)_ NoInputAccessoryView
var newClass:AnyClass? = NSClassFromString(noInputAccessoryViewClassName)
if newClass == nil {
let targetClass:AnyClass = object_getClass(target)
newClass = objc_allocateClassPair(targetClass,noInputAccessoryViewClassName.cString(using:String.Encoding.ascii) !,0)
}
let originalMethod = class_getInstanceMethod(FauxBarHelper.self,#selector(getter:FauxBarHelper.inputAccessoryView))
class_addMethod(newClass!.self,#selector( getter:FauxBarHelper.inputAccessoryView),method_getImplementation(originalMethod),method_getTypeEncoding(originalMethod))
object_setClass(target,newClass)
}
HTH;)
I am trying for a few days now to get this converted into Swift without really having much background with it.
This is what I've got so far ... and I have been looking on google not really knowing what to search for in order to be more specific. Can you please shed some light on what I'm doing wrong ? Thanks
Update:
I have aded the objective-c tag just so more people that are related to this thread may be able to see it and hopefully get an answer.
Michael Dautermann answer has got everything right, but in order to hide the accessory bar you need to swizzle the method inputAccessoryView() of UIView Class with the inputAccessoryView() of the _NoInputAccessoryView class. I have just added the couple of extra lines to the code which does this job of method swizzling.
First you'll need a fake class to swap with
final class FauxBarHelper: NSObject {
var inputAccessoryView: AnyObject? { return nil }
}
Then create this method in your controller class
/// Removes the keyboard accessory view from the web view
/// Source: http://stackoverflow.com/a/32620344/308315 / http://stackoverflow.com/a/33939584/308315
func _removeInputAccessoryView(webView: UIWebView) {
var targetView: UIView? = nil
for view in webView.scrollView.subviews {
if String(describing: type(of: view)).hasPrefix("WKContent") {
targetView = view
}
}
guard let target = targetView else { return }
let noInputAccessoryViewClassName = "\(target.superclass!)_NoInputAccessoryView"
var newClass: AnyClass? = NSClassFromString(noInputAccessoryViewClassName)
if newClass == nil {
let targetClass: AnyClass = object_getClass(target)
newClass = objc_allocateClassPair(targetClass, noInputAccessoryViewClassName.cString(using: String.Encoding.ascii)!, 0)
}
let originalMethod = class_getInstanceMethod(FauxBarHelper.self, #selector(getter: FauxBarHelper.inputAccessoryView))
class_addMethod(newClass!.self, #selector(getter: FauxBarHelper.inputAccessoryView), method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
object_setClass(target, newClass)
}
HTH ;)
这篇关于在Swift中删除WKWebView Accesory栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!