webView 下的UIKeyBoard的 inputAccessView处理

在输入的键盘上方加上一个view,作为一个toolBar,算是现在的基本需求,苹果自身有一个inputAccessoryView,是用来给这个view的,继承自NSObject (readonly),iputView与inputAccessoryView 在textView和textField都是read write属性。使用很简单

 

 UIView*view1 = [[UIViewalloc]initWithFrame:CGRectMake(0, 0, 320, 20)];

    view1.backgroundColor = [UIColorredColor];

    self.viewText.inputAccessoryView= view1;

 

inputView就是显示键盘的view,如果重写这个view则,不再弹出键盘,而是弹出自己的view.

 

在 UIWebView 状态下,重写WebView的子类,赋予inputAccessView,重写getter setter方法,最终失败,没有起作用,网上搜索找到了一个隐藏inputAccessView的方法,先看看怎么隐藏的然后再考虑怎么写inputAccessView:

-(void)viewWillAppear:(BOOL)animated{

    [[NSNotificationCenterdefaultCenter] addObserver:self

                                             selector:@selector(keyboardWillShow:)

                                                 name:UIKeyboardWillShowNotification

                                               object:nil];

}

 

- (void)keyboardWillShow:(NSNotification *)note {

    [selfperformSelector:@selector(removeBar) withObject:nilafterDelay:0];

}

- (void)removeBar {

    // Locate non-UIWindow.

    UIWindow *keyboardWindow = nil;

    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {

        if (![[testWindow class] isEqual:[UIWindow class]]) {

            keyboardWindow = testWindow;

            break;

        }

    }

    

    // Locate UIWebFormView.

    for (UIView *formView in [keyboardWindow subviews]) {

        // iOS 5 sticks the UIWebFormView inside a UIPeripheralHostView.

        if ([[formView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) {

            for (UIView *subView in [formView subviews]) {

                if ([[subView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) {

                    [subView removeFromSuperview]; //这个view就是现在的inputAccessView,它的高度是44

                }

                elseif([[subView description] rangeOfString:@"UIImageView"].location != NSNotFound){

                    // remove the line above the input accessory view (changing the frame)

                    [subView setFrame:CGRectZero];

                }

            }

        }

    }

}

现在来看,咱们找到了怎么删除这个inputAccessView的方法    [subView removeFromSuperview];  那么我直接改写这个subView呢?那样不就改了inputAccessView了么,事实上没有,这样没有效果,没有效果是吧,那就戴面具,直接写个view,然后 [subView addSubView:view]; OK这个方法可行。

原文地址:https://www.cnblogs.com/superhappy/p/3102528.html