使用WKWebView时,如何隐藏键盘的输入附件视图?

时间:2017-10-17 12:20:20

标签: ios objective-c swift wkwebview

我们的应用程序中有一个webview,可以半生命周期的方式编辑一些文本。它只是一个全屏文本区域,因此我们不希望键盘上的下一个/上一个/完成按钮占用宝贵的屏幕空间。以前,以下工作删除了显示这些按钮的整个栏:

-(void)__removeInputAccessoryView {
    UIView* subview;

    for (UIView* view in _editorView.scrollView.subviews) {
        if([[view.class description] hasPrefix:@"UIWeb"])
            subview = view;
    }

    if(subview == nil) {
        return;
    }

    NSString* name = [NSString stringWithFormat:@"%@RWWebviewHelper", 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([RWWebviewHelper class], @selector(inputAccessoryView));
        class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));

        objc_registerClassPair(newClass);
    }

    object_setClass(subview, newClass);
}  

我在Objective-C和Swift的SO和Github上找到了类似的片段。我目前正在将这个类从Objective-C转换为Swift ,从使用UIWebView到使用WKWebView。我在某处发现了这个:

private func removeInputAccessoryView() {
    final class FauxBarHelper: NSObject {
        var inputAccessoryView: AnyObject? { return nil }
    }

    editorView.scrollView.subviews.forEach { view in
        if String(describing: type(of: view)).hasPrefix("WKcon") {
            let noInputAccessoryViewClassName = "\(view.superclass!)_NoInputAccessoryView"
            var newClass: AnyClass? = NSClassFromString(noInputAccessoryViewClassName)
            if newClass == nil {
                let targetClass: AnyClass = object_getClass(view)
                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(view, newClass)
        }
    }
}

但它并没有隐藏吧。我不太熟悉黑客私有API,在玩了那个片段中的值之后,我找不到隐藏条形的方法。我知道这是商店拒绝风险,但你知道客户是怎样的。我需要让这个工作。我可以使用Objective-C片段,但更喜欢Swift。

有没有人有想法?我觉得从屏幕键盘上隐藏按钮栏应该不是很难,我错过了一些简单的东西吗?

0 个答案:

没有答案
相关问题