2015-09-13 42 views

回答

11

這是可能在WKWebView與上UIWebView混寫出來的inputAccessoryView的方法的變型。

首先,添加這個小類:

@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審覈的應用中。

+0

這隻適用於UIWebView,不是嗎? –

+1

不,這個解決方案專門用於WKWebView,雖然它是根據UIWebView的一種技術改編的。 –

+0

@JustinMichael,任何想法我們如何將這個移植到Swift? – Eduard