15

另一个“如何删除 pre、next、done 按钮”——你可能会想到的问题。其实不是。我对此进行了一些相当彻底的研究,并尝试了不同的方法,但似乎没有任何方法或解决方案真正正确。下面提到和显示的所有解决方法(就是它们)基本上是相同的方法,替换 MainViewController.m文件的内容。我很清楚,所有这些提议的解决方案或多或少都有些老套,但仍然应该有人以一点优雅和深思熟虑解决了这个问题,或者有人非常了解 C 并且可以提出建议更可靠的解决方案。

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

解决方案 1

在 iOS6 中,这会导致表单助手栏边框仍然存在,并且键盘的行为就像表单助手栏仍然存在一样。

解决方案 2

有人提出了上述解决方案,但我根本无法让它发挥作用。回答者对帖子进行了多次编辑和评论,这只会让您更难掌握在哪里做什么。我已经尝试了他解决方案的所有变体,但我总是会遇到严重错误,并且项目根本无法编译

解决方案 3

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

解决方案 4

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

结论

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

4

6 回答 6

7

对于仍在为此苦苦挣扎的任何人,Phonegap 现在有两个属性用于禁用表单附件栏问题和当输入和文本区域字段触发键盘时页面滚动问题。

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

<preference name="HideKeyboardFormAccessoryBar" value="true" />
<preference name="KeyboardShrinksView" value="true" />

链接到Phonegap 文档

于 2013-09-07T07:35:28.757 回答
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
于 2013-01-23T12:00:12.527 回答
2

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

于 2013-01-12T23:29:51.570 回答
2

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

$ cordova plugin add org.apache.cordova.keyboard 

并在你的 javascript 中使用它

Keyboard.hideFormAccessoryBar(true);

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

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

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

于 2014-01-15T14:20:38.377 回答
2

这看起来像我们一直在等待的科尔多瓦插件...... https://github.com/don/KeyboardToolbarRemover

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

于 2013-01-23T11:28:13.050 回答
1

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

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

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

在分行

于 2013-02-09T14:40:25.130 回答