15

もう1つの「前、次、完了ボタンを削除する方法」-あなたが考えるかもしれない質問。実際にはそうではありません。私はこれについてかなり徹底的な調査を行い、さまざまなアプローチを試しましたが、実際にそれを正しく行う方法や解決策はないようです。以下に記載および示されているすべての回避策(これがそのとおりです)は基本的に同じアプローチであり、MainViewController.mファイルのコンテンツを置き換えます。これらの提案された解決策は多かれ少なかれハッキーであることを私はよく知っていますが、それでも、少しの優雅さと深い思考でこの問題に取り組んだ誰か、またはCをよく知っていて提案できる誰かがいるはずですより固溶体。

いくつかの提案された解決策を参照して、私の主張を説明させてください。

解決策1

iOS6では、これにより、フォームアシスタントバーの境界線が引き続き存在し、キーボードがフォームアシスタントバーがまだ存在するかのように機能します。

解決策2

誰かが上記の解決策を提案しましたが、私はそれを機能させることができません。回答者は投稿にいくつかの編集とコメントを加えましたが、それはどこで何をすべきかを理解するのを難しくするだけです。私は彼のソリューションのすべてのバリエーションを試しましたが、常に重大なエラーが発生し、プロジェクトは単にコンパイルされません。

解決策3

Cプログラマーではないので(それが私がphonegapを使用する理由です)、これを正しく機能させることができません。どこに何を追加すればよいかわからない。

解決策4

これをどこでどのように実装するかわからないので、試していません。KeyboardDidShow通知を受け取るにはどこに登録すればよいですか?関数はどこに追加すればよいですか?

結論

私の調査によると、もしあなたがそうするなら、誰もこれに対する適切な解決策をまだ提案していません。では、上記の副作用なしにフォームアシスタントを正常に削除した人はいますか?

4

6 に答える 6

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 に答える
7

まだこれに苦労している人のために、Phonegapには、フォームアクセサリバーの問題と、入力フィールドとテキスト領域フィールドがキーボードをトリガーするときのページスクロールの問題を無効にする2つのプロパティがあります。

config.xmlに次のように設定するだけで、準備は完了です。

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

Phonegapドキュメントへのリンク

于 2013-09-07T07:35:28.757 に答える
2

iOSのどのバージョンでも、UIWebView(PhoneGapが使用するAFAIK)フォーム要素のWebビューでフォームアシスタントバーを無効にする公開(つまり、App Storeで許可されている)方法はありません。

于 2013-01-12T23:29:51.570 に答える
2

これは私たち全員が待ち望んでいたcordovaプラグインのようです... https://github.com/don/KeyboardToolbarRemover

これにより、シンプルtoolbar.hide()toolbar.show()

于 2013-01-23T11:28:13.050 に答える
2

phonegap / cordova 3 CLIを使用している場合は、ツールバーを削除するためのプラグインが必要になります。ターミナルからインストールしてください。

$ cordova plugin add org.apache.cordova.keyboard 

これをJavaScriptで使用します

Keyboard.hideFormAccessoryBar(true);

しかし...それは完璧ではありません。まず、input.focus()を使用してキーボードを表示する場合は、ツールバーが非表示になる前に短時間表示されます。それ以来、それは大丈夫です。ユーザーが入力フィールドを直接クリックできるようにすると、問題ありません。

次に、画面の上部に動きがある可能性があります。これは、この回答で解決できます 。iOSのCordova3.1でキーボードの問題を修正するにはどうすればよいですか。

正しく理解するのは難しいかもしれないので、本当にそれを隠す必要があるのか​​、それともユーザーにとって役立つようにするのか、自問したいと思います。

于 2014-01-15T14:20:38.377 に答える
1

これは私のために働いた:https ://github.com/don/KeyboardToolbarRemover

ただし、Phonegap 2.3.0の時点ではCordova.plistファイルはありません。代わりに、次のように構成XMLファイルを編集してください。

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

ブランチで

于 2013-02-09T14:40:25.130 に答える