IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    iOS5网页视图(UIWebView)中的输入框不能弹出键盘的问题

    shenqiliang发表于 2013-10-14 13:19:21
    love 0

    项目开发时,发现有时候在网页视图中的输入框获得焦点后,却不能弹出键盘。而且全部都是在iOS5的系统中出现了这个问题,iOS6中运行完全是正常的,而且即使是在iOS5中,其他的UITextView和UITextField仍然可以正常地弹出键盘。我仔细了看了一下代码,发现对UIWebView的一些操作和键盘弹出并没有什么关系。我看了一些UIWebView的一些资料,然后发现了这个问题:UIWebView要能弹出键盘,那么它所在的window必须是key window。

    什么是key window?

    key window就是接收键盘消息的window。键盘消息都会发送到key window上。而这个key window往往是系统自动设置的,但web view获得焦点并没有自动设置(也许是Apple开发偷了个懒),然而我们也可以用一个方法手动设置。

    [window makeKeyAndVisiable]
    

    一个演示例子

    为了验证这个问题我也写了一段简短的代码:

    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.window.bounds];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
    [self.window addSubview:webView];
    
    UIWindow *anotherWindow = [UIWindow new];
    [anotherWindow makeKeyAndVisible];
    

    这段代码在iOS5中运行的话,即使输入框获得了焦点也不能弹出键盘。
    image

    解决方案

    如果在UIWebView被添加的window上时,将window设置为key window就好了。

    [self.window makeKeyAndVisiable]
    [self.window addSubview:webView];
    

    小结

    UIWebView要能弹出键盘,那么它所在的window必须是key window。如果你的App可能存在多个Window(如弹出自定义的Alert,状态条等),而且这些window有可能被设置为key window,一定要在web view显示时将它所在的window设置为key window。



沪ICP备19023445号-2号
友情链接