UIWebView中输入框不能弹出键盘的解决方案

最近在状态栏上面加提示信息(view),开始采用隐藏状态栏方法,但这样有一个问题会造成视图往上移动,被加在状态栏位置的view遮盖掉;后来将view加到keyWindow上面,关键代码如下:

[[UIApplication sharedApplication].keyWindow setWindowLevel:UIWindowLevelStatusBar];

    UIView   *staView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];

    staView.backgroundColor = [UIColor redColor];

    [[UIApplication sharedApplication].keyWindow addSubview:staView];

但这种方法又会造成以下问题,我在视图上的WebView的点击输入框时键盘被隐藏了,原因是因为键盘所在的window的 WindowLevel比UIWindowLevelStatusBar低
在网上找了一些资料,采用自己建一个frame值与状态栏一样的window,代码如下:

        _topWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];

        [_topWindow setBackgroundColor:[UIColor clearColor]];

        [_topWindow setWindowLevel:UIWindowLevelStatusBar];

这时同样设置了 WindowLevel级别为UIWindowLevelStatusBar,还是会出现第二种的键盘被隐藏的情况

一、原因分析:

通常是由于程序中除AppDelegate中的UIWindow以外又定义了其他的UIWindow,并使用了[XXwindow makeKeyAndVisible]方法将自定义的UIWindow表示在画面最前端,

从而影响到了程序中其他UIWebView中的响应。


二、解决方法:

通常在脱离自定义UIWindow的响应范围的时候(比如某个画面的viewWillDisappear事件里),将AppDelegate中的UIWindow重新放回到最前端即可。

    XXXAppDelegate *appDelegate = (XXXAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate.window makeKeyAndVisible];

你可能感兴趣的:(iOS开发技术系列专栏)