如何从虚拟键盘IOS中删除prev next按钮

时间:2011-12-12 07:08:47

标签: objective-c ios5 uiwebview keyboard next

我在IOS 5中使用了UIWebview。我尝试设置contenteditable="true"以使uiwebview可编辑。

我的应用的屏幕截图类似于此链接中的图片How do you remove the Next and Prev buttons from virtual keyboard in Sencha Touch / Phonegap application

enter image description here

我的问题是我想删除这个prev&键盘的下一个按钮,但我不知道如何。有人可以帮助我吗?

谢谢

4 个答案:

答案 0 :(得分:11)

这是一个旧答案,不再适用于iOS 9.有关更新的解决方案,请参阅我的回答here


这是一个灰色区域,但肯定是可能的。

见这里:http://ios-blog.co.uk/iphone-development-tutorials/rich-text-editing-a-simple-start-part-1/

在键盘上注册显示通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

然后:

- (void)keyboardWillShow:(NSNotification *)note {
    [self performSelector:@selector(removeBar) withObject:nil afterDelay: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 *possibleFormView in [keyboardWindow subviews]) {       
        // iOS 5 sticks the UIWebFormView inside a UIPeripheralHostView.
        if ([[possibleFormView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) {
            for (UIView *subviewWhichIsPossibleFormView in [possibleFormView subviews]) {
                if ([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) {
                    [subviewWhichIsPossibleFormView removeFromSuperview];
                }
            }
        }
    }
}

答案 1 :(得分:3)

删除空白区域。

- (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 *possibleFormView in [keyboardWindow subviews]) {
        if ([[possibleFormView description] hasPrefix:@"<UIPeripheralHostView"]) {
            for (UIView* peripheralView in [possibleFormView subviews]) {

                // hides the backdrop (iOS 7)
                if ([[peripheralView description] hasPrefix:@"<UIKBInputBackdropView"]) {
                    //skip the keyboard background....hide only the toolbar background
                    if ([peripheralView frame].origin.y == 0){
                        [[peripheralView layer] setOpacity:0.0];
                    }
                }
                // hides the accessory bar
                if ([[peripheralView description] hasPrefix:@"<UIWebFormAccessory"]) {
                    // remove the extra scroll space for the form accessory bar
                    UIScrollView *webScroll;
                    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
                        webScroll = [[self webView] scrollView];
                    } else {
                        webScroll = [[[self webView] subviews] lastObject];
                    }
                    CGRect newFrame = webScroll.frame;
                    newFrame.size.height += peripheralView.frame.size.height;
                    webScroll.frame = newFrame;

                    // remove the form accessory bar
                    [peripheralView removeFromSuperview];
                }
                // hides the thin grey line used to adorn the bar (iOS 6)
                if ([[peripheralView description] hasPrefix:@"<UIImageView"]) {
                    [[peripheralView layer] setOpacity:0.0];
                }
            }
        }
    }
}

答案 2 :(得分:1)

这是inputAccessoryView UIWebBrowserViewUIWebView}的{{1}},你可以破解它。

以下是一个示例:https://gist.github.com/bjhomer/2048571

答案 3 :(得分:1)

我找到了适用于iOS 8的解决方案。您可以在此处查看:

-(void) removeKeyboard {
UIWindow *keyboardWindow = nil;
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
    if (![[testWindow class] isEqual : [UIWindow class]]) {
        keyboardWindow = testWindow;
        break;
    }
}
// Locate UIWebFormView.
for (UIView *possibleFormView in [keyboardWindow subviews]) {

    if ([[possibleFormView description] hasPrefix : @"<UIInputSetContainerView"]) {
        for (UIView* peripheralView in possibleFormView.subviews) {

            for (UIView* peripheralView_sub in peripheralView.subviews) {


                // hides the backdrop (iOS 8)
                if ([[peripheralView_sub description] hasPrefix : @"<UIKBInputBackdropView"] && peripheralView_sub.frame.size.height == 44) {
                    [[peripheralView_sub layer] setOpacity : 0.0];

                }
                // hides the accessory bar
                if ([[peripheralView_sub description] hasPrefix : @"<UIWebFormAccessory"]) {


                    for (UIView* UIInputViewContent_sub in peripheralView_sub.subviews) {

                        CGRect frame1 = UIInputViewContent_sub.frame;
                        frame1.size.height = 0;
                        peripheralView_sub.frame = frame1;
                        UIInputViewContent_sub.frame = frame1;
                        [[peripheralView_sub layer] setOpacity : 0.0];

                    }

                    CGRect viewBounds = peripheralView_sub.frame;
                    viewBounds.size.height = 0;
                    peripheralView_sub.frame = viewBounds;

                }
            }

        }
    }
}
}

您可以尝试改进这一点。尝试在您的UIKeyboardDidShowNotification事件处理程序中调用此函数。

希望这会有所帮助...... 这是附件中的视图级别: (UIWebFormAccessory) - &gt; (UIToolbar) - &gt; (的UIImageView,UIToolbarButton,UIToolbarButton)