webview中的iOS键盘样式?

Posted

技术标签:

【中文标题】webview中的iOS键盘样式?【英文标题】:iOS keyboard style in webview? 【发布时间】:2012-10-27 15:44:54 【问题描述】:

我是 Web 开发的新手,我的项目使用的是 Jquery-mobile、Phonegap 和 compass (scss)。

默认情况下,当输入字段获得焦点时显示的键盘是一种包含具有字段导航功能的顶部栏的键盘。我想摆脱这个导航栏,并显示 ios 中可用的最简单的键盘。我尝试将我的对象包含在表单中或没有表单标签,但没有成功。我不知道如何实现这一点,如果可能的话:/

感谢您的任何建议!

如果遇到此问题,请务必前往 https://bugreport.apple.com 并复制 rdar://9844216

【问题讨论】:

【参考方案1】:

要删除该栏,您应该深入了解 Objective-c 代码。

这是我使用的代码:(在包含您的 UIWebview 的控制器内添加以下代码)

首先添加一个观察者来接收键盘的通知:

-(void)viewWillAppear:(BOOL)animated
   [[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 *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) 
                // remove the input accessory view
                [subView removeFromSuperview];
            
            else if([[subView description] rangeOfString:@"UIImageView"].location != NSNotFound)
                // remove the line above the input accessory view (changing the frame)
                [subView setFrame:CGRectZero];
            
        
      
    

【讨论】:

呃,好吧,但是我应该把这段代码放在哪个文件中?我应该在我的 xcode 项目中创建一个新文件吗? 我已经添加了删除栏的完整代码,您应该将其添加到包含您的 webview 的控制器中。如果您有问题,请告诉我 很干净,评论很好。 +1 在 MyProject/Classes/MainViewController.m 的末尾添加了您的代码,效果很好 :) 谢谢!【参考方案2】:

我正在使用 iOS 7.0 并在 UIWebView 上使用以下代码修复它

-(void)removeExtraBar

    UIWindow *keyboardWindow = nil;
    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) 
        if (![[testWindow class] isEqual:[UIWindow class]]) 
            keyboardWindow = testWindow;
            break;
        
    
    for (UIView *possibleFormView in [keyboardWindow subviews]) 
        if ([[possibleFormView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) 
            for (UIView *subviewWhichIsPossibleFormView in [possibleFormView subviews]) 
                if ([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) 
                    [subviewWhichIsPossibleFormView removeFromSuperview];
                
                else if([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIKBInputBackdropView"].location != NSNotFound) 
                    [subviewWhichIsPossibleFormView removeFromSuperview];
                
            
        
    

这适用于 iOS 7.0 上的 UIWebView 键盘问题

【讨论】:

以上是关于webview中的iOS键盘样式?的主要内容,如果未能解决你的问题,请参考以下文章

ios键盘不占webview的高度

iOS webview html5 移动端 软键盘弹起遮挡输入框

使用键盘html时ios7问题与webview焦点有关

iOS webview自动对焦在键盘打开时不起作用

使用 phonegap 防止键盘在 iOS 应用程序中向上推 webview

Android webview中的js如何监听键盘事件