Phonegap:完全从iPhone键盘上移除黑条

时间:2012-05-25 00:20:33

标签: iphone objective-c cordova soft-keyboard

我们正在使用Phonegap开发我们的移动应用程序,我们从这里借用代码从键盘中删除黑色的next / prev / done栏:

https://stackoverflow.com/a/9276023/35364

该代码的作用是找到黑条,作为UIView对象,并在其上调用'removeFromSuperview'。

我们不熟悉iOS SDK / API。因此,虽然我们可以查看代码并了解它正在做什么,但我们无法确定它是否正确执行,或者如何改进它。

我们遇到的具体问题:

我们有一个用于编写邮件的文本字段,我们手动控制此字段的位置正好位于键盘上方,类似于本机短信应用程序。换句话说,我们把它放在应该是黑条的位置。

当我们关注/输入消息字段时,系统会向上推动视图。看起来这是一种确保文本字段在用户输入时不可见的机制。

即使文本字段 可见,也会发生这种情况。

我注意到,通过将输入字段放在黑色条通常位于正上方的位置(与其背后相对),视图不会滚动。

所以系统似乎认为黑条仍在那里!

(要仔细检查:当黑色条没有被移除,我们将文本字段放在它上面时,我们可以对焦并输入它,并且视图不会滚动)。

所以问题是:

为什么“系统”会在编辑一个文本字段时推送内容,该字段位于黑色条应该位于“后面”的位置?是因为黑条还没有被完全移除吗?我们需要做些什么来“完全”去除黑条吗?我们是否需要强制iOS重新计算键盘的大小?或究竟是什么?

这个机制(推高视图)是由iOS的UIWebView或Phonegap实现的吗?

有没有解决此问题的手机应用程序?

2 个答案:

答案 0 :(得分:9)

替换

[subviewWhichIsPossibleFormView removeFromSuperview];

UIScrollView *webScroll = [webView.subviews lastObject];
CGRect newFrame = webScroll.frame;

float accesssoryHeight = subviewWhichIsPossibleFormView.frame.size.height;
newFrame.size.height += accesssoryHeight;

[subviewWhichIsPossibleFormView removeFromSuperview];
[webScroll setFrame:newFrame];

它会调整内容滚动视图的大小以查找缺少附件空间的数量。它使用“私有API”作为其他代码。详细说明,它不直接使用私有API,但如果Apple决定更改视图的显示方式(在本例中为Keyboard和WebView),则会崩溃。 例如,如果他们重命名UIWebFormAccessory,您的代码将不再有效。

编辑:
在iOS 5.0+上,您可以直接致电webView.scrollView。因此,您可以将代码拆分为具有iOS 5之前的后备:

UIScrollView *webScroll;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
    webScroll = webView.scrollView;
} else {
    webScroll = [webView.subviews lastObject]; // iOS 2.x (?) - 4.x
    // make sure this code runs appropriate on older SDKs
}

答案 1 :(得分:0)

这对我有用:https://github.com/don/KeyboardToolbarRemover

您必须知道,自Phonegap 2.3.0起没有Cordova.plist文件 - 而是使用以下内容编辑您的配置XML文件:

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" />

在分支