UIWebView中的键盘在输入焦点时显示然后隐藏本身。

8
我有一个页面加载到UIWebView(占据iPad屏幕的100%)上。当我点击文本框时,页面会将文本框定位到正确位置并开始弹出键盘,但是随后键盘又会突然消失,并且输入框会被调用blur()方法。
在移动版Safari中尝试同样的页面,键盘可以成功弹出。
我无法找出键盘成功显示并保持弹出的规则,以及为什么UIWebView和Safari表现不同。
我对此进行了大量研究,但没有找到答案。

当键盘弹出时,您是否正确处理了视图的调整大小?如果没有,这可能是意外行为的原因。 - Paul
如何正确调整视图的大小?我已经为键盘事件编写了处理程序。我只是不知道保持键盘打开所需的条件是什么... - Jake
3
听起来你正在更改/放弃其中一个 webView 委托方法中的 firstresponder。请问你能展示那些委托方法的代码吗? - Mihai Timar
你的代码中有看到 "resignFirstResponder" 吗?@MihaiTimar 已经提到了。为了得到更好的答案,你需要提供一些代码。 - Any
问题是在3年前提出的。但是,仍然可以使用UITextFieldDelegate协议方法来自定义UITextField的行为。你是否正在使用[textField resignFirstResponder]?请分享你提到的模糊代码或截图。 - raurora
1个回答

1

在您的问题中没有贴出任何代码,我猜测只有在 HTML 文本字段被触摸后才会发生键盘回弹,这是在最后调用 UIWebViewDelegate webViewDidFinishLoad: 的情况下。

为了测试这一点,首先将您的 UIWebView.delegate 设置为拥有它的 UIViewController(或其他拥有 UIWebView 的对象)。然后实现这些委托方法。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *urlString = request.URL.absoluteString;
    NSLog(@"%@ with URL = %@", NSStringFromSelector(_cmd), urlString);

    return YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *urlString = webView.request.URL.absoluteString;
    NSLog(@"%@ with URL = %@", NSStringFromSelector(_cmd), urlString);
}

运行您的应用程序并记录`webViewDidFinishLoad:`被调用的次数。(如果您的网页包含多个框架或包括Google Analytics之类的内容,则将会被多次调用。)
在最后一次调用`webViewDidFinishLoad:`后尝试触摸HTML文本字段。键盘是否保持弹出状态?(我认为是这样的。)
如果可以,请尝试在最后一次调用`webViewDidFinishLoad:`之前进行触摸。键盘是否会弹出然后又消失?

这确实是正在发生的事情,但问题是如何解决它。有什么想法吗? - Peter Jacobs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接