11

IOS 用の Cordova 2.2 を使用して PhoneGap アプリを構築しています。MFMessageComposeViewController を表示するために作成したネイティブ obj-c プラグインを呼び出すと、奇妙な動作が発生します。

セットアップは非常に簡単です。タップ イベントを UI 要素にアタッチしています。このイベントを押すと、PhoneGap プラグインが呼び出され、番号とテキスト メッセージが渡され、パラメータが事前に設定された MFMessageComposeViewController が表示されます。 .

私のJavaScriptは次のようになります:

$(document).bind('deviceready', function(){ 

    $(".theButton").tap(function(){     

        cordova.exec(function(){}, function() {}, "PhoneGapSms", "SendSms", [db.getItem("profile_sms"), db.getItem("profile_emergency")]);

    }); 
});

そして、私の obj-c コードは次のようになります。

- (void)SendSms:(CDVInvokedUrlCommand*)command
{

    CDVInvokedUrlCommand* myCommand = command;

    MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];

    NSString* body = [command.arguments objectAtIndex:0];
    NSString* toRecipientsString = [command.arguments objectAtIndex:1];

        if(body != nil)
            picker.body = body;

        if(toRecipientsString != nil)
            [picker setRecipients:[ toRecipientsString componentsSeparatedByString:@","]];


    picker.messageComposeDelegate = self;

    [self.viewController presentModalViewController:picker animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];


    [picker release];

}

つまり、全体として、非常に単純なものです。

私の問題はこれです:

iPhone をMac に接続し、アプリを XCode から実行すると、Message Composer オーバーレイが表示され、値が事前入力されて表示されます。以下の画像は、XCode にプラグインしている間、SMS インターフェイスが正常に表示されることを示しています。

ここに画像の説明を入力

iPhone をMac から取り外し、アプリをスプリング ボードから実行すると、オーバーレイが上にスライドし、キーボードが上にスライドし始め、すぐに下にスライドして、メッセージの入力や送信ができなくなります。これは、Mac/Xcode に接続されていない場合の外観です。キーボードが上にスライドし始め、すぐに下にスライドし (~ < 1 秒)、次のインターフェイスを離れます。

ここに画像の説明を入力

私は一生、XCodeから実行していないときにキーボードが非表示になる原因を突き止めることはできませんが、XCodeから実行しているときは完全にうまく機能します.

キーボードを「強制的に」表示する方法はありますか、または modalviewcontroller 全体をファーストレスポンダーとして何らかの形または方法で配置する方法はありますか?

どんな提案でも大歓迎です!

編集:

接触領域をクリックすると、キーボードが再び表示されます

4

4 に答える 4

3

MessageUI.frameworkXcode プロジェクトに追加して、

#import <MessageUI/MessageUI.h>ヘッダーファイルで。

このコードを試してみてください..

[self presentModalViewController:picker animated:YES];
//[self becomeFirstResponder];//try picker also instead of self

また、この次のチュートリアルを参照し、デモも確認してください。

  1. 新しいチュートリアルの開発と設計-phonegap-アプリケーション

  2. SMSComposer

これがお役に立てば幸いです...

于 2012-12-19T05:34:36.787 に答える
2

これらの症状は、Sencha Touch 2.2 と Cordova 2.6.0 のセットアップ (特に iOS 6 以降のデバイス) で発生しました。

この問題は、Web フレームワークがネイティブの SMS Composer モーダルからフォーカスを奪うことにあり、通常、最初の SMS Composer モーダルが正常に表示されて閉じられた後に発生します。

これは、イベントが発生した (またはSencha ランドで) 呼び出された後に呼び出されますevent.preventDefault()event.stopPropagation()event.stopEvent()

お役に立てれば、

-ジェームズ

于 2013-05-07T15:33:25.510 に答える
0

同じタイプの問題が見つかりましたが、問題が解決するかどうかはわかりません。次のリンクをご覧ください。1。http: //community.phonegap.com/nitobi/topics/keyboard_is_not_triggerd_in_my_ios_build 2. https:// github .com / phonegap / build / issues / 31

問題が解決しない場合は、ここからサンプルコードをダウンロードできます。

リンク:https ://github.com/phonegap/phonegap-plugins/tree/master/iPhone/SMSComposer

于 2012-12-24T14:22:08.400 に答える
0

最初:あなたのコードを見ずに最も可能性の高い犯人は、あなたの親(提示している)View Controllerがその中にアクションを持っているか、誰が「最初の」レスポンダーを持っているviewWillDisappearかに影響を与えていることです. viewDidDisappearこれらのメソッドは、View Controller をモーダルに表示するときに呼び出されます。タイミングが原因で、シミュレータとデバイスで動作が異なる場合があります。多くの場合、ARM デバイスと i386 プロセッサでは、非常に近いタイミング条件が異なります。

2 番目UIKeyboardWillShowNotification: アプリ内のどこかでまたは に登録されていUIKeyboardDidShowNotificationますか? その場合は、結果として呼び出されるメソッドにブレークポイントを配置します。ビュー階層内の他のコントローラーがこのコントローラーに干渉している可能性があります。

あなたの質問に答えるには...

キーボードを「強制的に」表示する方法はありますか、または modalviewcontroller 全体をファーストレスポンダーとして何らかの形または方法で配置する方法はありますか?

両方にいいえ。キーボードを表示する唯一のbecomeFirstResponder方法は、入力ビューのメソッドを呼び出すことです。Apple はテキスト ビューを公開していないため、メッセージを送信することはできません。ファーストレスポンダーとして設定するmodalViewControllerと、間違ったオブジェクトが設定されます。

于 2012-12-21T03:14:32.220 に答える