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 全体をファーストレスポンダーとして何らかの形または方法で配置する方法はありますか?
どんな提案でも大歓迎です!
編集:
接触領域をクリックすると、キーボードが再び表示されます