在Swift中删除WKWebView Accesory栏 [英] Removing WKWebView Accesory bar in Swift

查看:299
本文介绍了在Swift中删除WKWebView Accesory栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在试着将

解决方案

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆