IOS - 当uiwebview重新加载时如何避免键盘隐藏

hta*_*oya 7 iphone keyboard hide webview ios

我有一个加载网络聊天客户端的webview.

每次聊天时,页面都有一个文本字段来输入文本.

问题是当用户打开键盘时,由于几个正在重新加载页面的ajax请求,它会在短时间后自动隐藏.这对用户来说真的很烦人,因为他或她在键盘隐藏之前不能输入完整的句子.

我不知道为什么,这只发生在iPhone 4S和iPhone 5中.在iPhone 4,3GS和模拟器中一切正常.

我曾尝试使用shouldStartLoadWithRequest来捕获请求并在用户隐藏键盘后加载它,但这会破坏聊天会话.

我试图用相同的方法用线程休眠"挂起"请求,但是它发生在主线程中,因此它会冻结整个应用程序.

有没有办法可以简单地避免键盘隐藏?

Bas*_*CAD 7

所以经过长时间的研究,我发现了一种方法,它不是最好的,但它对我帮助很大.

首先DOM用来检查webView是否是firstResonder

- (BOOL)isWebViewFirstResponder
{
    NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"document.activeElement.tagName"];
    if([[str lowercaseString]isEqualToString:@"input"]) {
        return YES;
    }
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

然后响应UIWebViewDelegate方法shouldStartLoadWithRequest,NO如果UIWebView是第一响应者则返回

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if([self isWebViewFirstResponder] &&
   navigationType != UIWebViewNavigationTypeFormSubmitted) {
        return NO;
    } else {
        return YES;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为ShareKit中的人应该为"SHKOAuthView.h"执行此操作.我在授权tumblr时遇到了这个问题. (2认同)
  • 在授权Tumblr时遇到完全相同的问题,你的修复帮了我很多,谢谢@Basheer_CAD :) (2认同)

小智 -1

您可以在 DidLoad 方法中使用通知中心来监听键盘何时隐藏,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWillHide)
                                         name:UIKeyboardWillHideNotification
                                       object:nil];

- (void) keyboardWillHide{

  [webView becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

这将使网络视图成为第一响应者并再次显示键盘。我自己还没有尝试过,所以希望它能成功。