在UIWebview上编辑文本字段时的Dimiss键盘

时间:2012-02-02 08:00:41

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

我正在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 
}

4 个答案:

答案 0 :(得分:7)

试试这个

[webView endEditing:YES]

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

答案 1 :(得分:2)

添加遍历所有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 :(得分:0)

点击后可以使用javascript将焦点从html元素中移开:

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

答案 3 :(得分:0)

您需要将下一类UIView添加到您的代码中,并将上述方法添加到您的实现中 在@implementation

之前,将下一个代码添加到.m文件中
@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];
    }
}