【问题标题】:Dimiss keyboard when editing textfield on UIWebview在 UIWebview 中编辑文本字段时关闭键盘
【发布时间】:2012-02-24 21:41:21
【问题描述】:

我正在 UIWebview 上打开一个网页,该页面有一个文本字段和一个用于输入密码的虚拟键盘。但是当编辑文本字段时,iPhone 虚拟键盘也会出现。 我想关闭 iPhone 键盘,同时继续编辑文本字段。我尝试了以下方法,但没有成功。

[webView stringByEvaluatingJavaScriptFromString:@"document.activeElement.blur()"];

并且还尝试注册键盘通知,以便我可以关闭键盘但没有成功。我将不胜感激有关如何实现这一目标的任何想法。提前致谢。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector (keyboardDidShow:)
                                                 name: UIKeyboardDidShowNotification object:nil];



-(void) keyboardDidShow: (NSNotification *)notif 
{
// I want to dismiss the keyboard 
}

【问题讨论】:

    标签: iphone objective-c cocoa-touch uiwebview uitextfield


    【解决方案1】:

    添加遍历所有 webview 子视图并退出第一响应者的方法

         -(BOOL)resignFirstResponderAction:(UIView *)view{
            if (view.isFirstResponder){
                [view resignFirstResponder];
                return YES;
            }
            
            for (UIView *subView in view.subviews) {
                if ([self resignFirstResponderAction:subView]){
                    return YES;
                }
            }
            return NO;
         }
    

    然后用 webview 调用这个方法:

         [self resignFirstResponderAction:webView];
    

    编辑

    似乎有更简单的解决方案:

    [webView endEditing:YES]
    

    我保留原来的答案,因为它在某些情况下可能会有所帮助

    【讨论】:

      【解决方案2】:

      您需要将下一个类别的 UIView 添加到您的代码中
      并将上述方法添加到您的实现中 将下一个代码添加到您的 .m 文件中,在 @implementation 之前

      @implementation UIView (FindFirstResponder)
      
      - (UIView *)findFirstResponder
      {
          if (self.isFirstResponder) {        
              return self;     
          }
      
          for (UIView *subView in self.subviews) {
              UIView *firstResponder = [subView findFirstResponder];
      
              if (firstResponder != nil) {
                  return firstResponder;
              }
          }
      
          return nil;
      }
      @end
      
      
      -(void)hideWebViewFirstResponser{
          UIView *firstResponderOwner=[webView findFirstResponder];
          if(firstResponderOwner) {
              [firstResponderOwner resignFirstResponder];
          }
      }
      

      【讨论】:

        【解决方案3】:

        当它被点击时,您可以使用 javascript 将焦点从 html 元素上移开:

         <input type="text" onClick="document.getElementById('myInput').blur();" id="myInput"/>
        

        【讨论】:

          【解决方案4】:

          试试这个

          [webView endEditing:YES]
          

          如果上述解决方案不起作用,您也可以尝试此链接 - Hide keyboard in UIwebView

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-03
            • 1970-01-01
            • 2017-08-14
            • 2021-03-24
            • 1970-01-01
            • 2016-05-15
            • 2012-12-07
            相关资源
            最近更新 更多