Phonegap iOS6:删除表格助手栏的正确解决方案(上一步,下一步,完成)

另一个“如何删除前,下,完成按钮” – 你可能会想到的问题 。 实际上并非如此。 我已经对此做了一些相当彻底的研究并尝试了不同的方法,但没有任何方法或解决方案似乎真的做得对 。 下面提到和显示的所有解决方法(就是它们)基本上是相同的方法, 替换MainViewController.m文件的内容 。 我很清楚,所有这些提议的解决方案或多或少都有些笨拙,但仍然应该有一些人以一点点优雅和深思熟虑解决这个问题 ,或者那些了解C并且可以提议的人更坚固的解决方案。

请允许我通过提及一些提议的解决方案来说明我的观点:

解决方案1

在iOS6中,这导致表单助手栏边框仍然存在 ,键盘的作用就好像表格助手栏还在那里。

解决方案2

有人提出了上述解决方案,但我根本无法使其发挥作用。 回答者对post进行了多次编辑和评论,只是更难以掌握在哪里做什么。 我已经尝试了他的解决方案的所有变体,但我总是得到一个严重错误 ,项目根本不会编译

解决方案3

不是C程序员(这就是我使用phonegap的原因)所以无法让它正常工作。 不知道在哪里添加

解决方案4

不知道在哪里以及如何实现这一点,所以没有尝试过。 我应该在哪里注册以接收keyboardDidShow通知? 我应该在哪里添加function?

结论

根据我的研究,如果你愿意的话,还没有人提出适当的解决方案。 那么有没有人成功删除了表格助手而没有任何上述副作用?

在这里,我在我正在开发的应用程序中使用它。 手指越过它进入应用程序商店,虽然进入其他“黑客”进入商店这并不比其他人差,所以应该有一个公平的机会。

这种方法没有恼人的副作用 – 它通过确保它从未在第一时间创建而干净地移除了它。 塔达!

信用转到https://gist.github.com/2048571 ,这是他的代码,有一个小修复。

#import  #import  @interface UIWebView (HackishAccessoryHiding) @property (nonatomic, assign) BOOL hackishlyHidesInputAccessoryView; @end @implementation UIWebView (HackishAccessoryHiding) static const char * const hackishFixClassName = "UIWebBrowserViewMinusAccessoryView"; static Class hackishFixClass = Nil; - (UIView *)hackishlyFoundBrowserView { UIScrollView *scrollView = self.scrollView; UIView *browserView = nil; for (UIView *subview in scrollView.subviews) { if ([NSStringFromClass([subview class]) hasPrefix:@"UIWebBrowserView"]) { browserView = subview; break; } } return browserView; } - (id)methodReturningNil { return nil; } - (void)ensureHackishSubclassExistsOfBrowserViewClass:(Class)browserViewClass { if (!hackishFixClass) { Class newClass = objc_allocateClassPair(browserViewClass, hackishFixClassName, 0); IMP nilImp = [self methodForSelector:@selector(methodReturningNil)]; class_addMethod(newClass, @selector(inputAccessoryView), nilImp, "@@:"); objc_registerClassPair(newClass); hackishFixClass = newClass; } } - (BOOL) hackishlyHidesInputAccessoryView { UIView *browserView = [self hackishlyFoundBrowserView]; return [browserView class] == hackishFixClass; } - (void) setHackishlyHidesInputAccessoryView:(BOOL)value { UIView *browserView = [self hackishlyFoundBrowserView]; if (browserView == nil) { return; } [self ensureHackishSubclassExistsOfBrowserViewClass:[browserView class]]; if (value) { object_setClass(browserView, hackishFixClass); } else { Class normalClass = objc_getClass("UIWebBrowserView"); object_setClass(browserView, normalClass); } [browserView reloadInputViews]; } @end 

对于仍在努力解决这个问题的人来说,Phonegap现在有两个属性可用于禁用表单附件栏问题以及当输入和文本区域字段触发键盘时页面滚动的问题。

只需在config.xml中设置以下内容即可。

   

链接到Phonegap文档

在任何版本的iOS中,没有公共(允许App Store允许)方式禁用UIWebView(AFAIK是PhoneGap使用的)表单元素的Web视图上的表单助手栏。

这看起来像我们一直在等待的cordova插件… https://github.com/don/KeyboardToolbarRemover

这允许一个简单的toolbar.hide()toolbar.show()

如果您使用的是phonegap / cordova 3 CLI,则现在需要一个插件来删除工具栏。 通过终端安装..

 $ cordova plugin add org.apache.cordova.keyboard 

并在您的JavaScript中使用它

 Keyboard.hideFormAccessoryBar(true); 

但是……它并不完美。 首先,如果您打算使用input.focus()来调出键盘,则在隐藏之前会短暂显示工具栏。 从那以后它就没事了。 如果您允许用户直接在输入字段中单击它就可以了。

然后可以在屏幕顶部移动,这可以通过这个答案解决.. 如何在iOS上修复Cordova 3.1的键盘问题?

可能很难做到正确,所以我会问你自己是否真的需要隐藏它,或者你能否让它对用户有用?

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

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

  

在分公司