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

Lin*_*ros 15 c iphone keyboard jquery cordova

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

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

解决方案1

在iOS6中,这会导致表单助手栏边框仍然存在,键盘就像表格助手栏一样.

解决方案2

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

解决方案3

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

解决方案4

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

结论

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

Jor*_*ith 7

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

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

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

#import <objc/runtime.h>
#import <UIKit/UIKit.h>

@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
Run Code Online (Sandbox Code Playgroud)


Pas*_*Kit 7

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

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

<preference name="HideKeyboardFormAccessoryBar" value="true" />
<preference name="KeyboardShrinksView" value="true" />
Run Code Online (Sandbox Code Playgroud)

链接到Phonegap文档

  • 较新版本的Phonegap(3.1,3.2和3.3)的文档中不存在HideKeyboardFormAccessoryBar选项 - 任何人都知道发生了什么?更新:没关系 - 它刚刚从iOS文档转移到一般的config.xml文档:http://docs.phonegap.com/en/3.3.0/config_ref_index.md.html (2认同)