Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Keyboard shows then immediately hides itself when showing MFMessageComposeViewController

I am building a PhoneGap app using Cordova 2.2 for IOS. I am experiencing some bizarre behavior when calling out to a native obj-c plugin I have written to show the MFMessageComposeViewController.

The setup is very simple - I have a tap event attached to a UI element, that when pressed, will make a call to my PhoneGap plugin, pass with it a number and a text message, then show the MFMessageComposeViewController with the parameters pre-populated.

My javascript looks like this:

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

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

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

    }); 
});

And my obj-c code looks like this:

- (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];

}

So, all in all, very simple stuff.

My Problem is this:

When my iPhone is plugged into my Mac and the app is run from XCode, the Message Composer overlay appears great, with my values pre-populated. Image below demonstrating the SMS interface appears fine while plugged into XCode:

enter image description here

When my iPhone is unplugged from my Mac, and the app is run from the spring board, the Overlay slides up, the keyboard begins to slide up, then immediately slides down - making it impossible to type or send the message. This is what it looks like when not attached to the Mac/Xcode - the keyboard begins to slide up then immediately slides down (~ < 1 sec) leaving the following interface:

enter image description here

I can't for the life of me figure out what would cause the keyboard to hide when not running from XCode, but work perfectly well when it is.

Is there any way to 'force' the keyboard to display, or possibly put the whole modalviewcontroller as first responder in some form or fashion?

Any suggestions are appreciated!

Edit:

The keyboard WILL appear again if you click in the contact area

like image 968
Evan Avatar asked Dec 14 '12 18:12

Evan


2 Answers

You must add MessageUI.framework to your Xcode project and include a

#import <MessageUI/MessageUI.h> in your header file.

try this code may be its helpful to you..

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

Also Refer this bellow tutorial and also check demo..

  1. new-tutorial-developing-and-architecting-a-phonegap-application

  2. SMSComposer

i hope this help you...

like image 102
Paras Joshi Avatar answered Oct 25 '22 02:10

Paras Joshi


I encountered these symptoms with a Sencha Touch 2.2 and Cordova 2.6.0 setup (specifically, iOS 6+ devices).

The issue was with the web framework stealing focus away from the native SMS Composer modal, typically occurring after the first SMS Composer modal had been successfully displayed and closed.

A event.preventDefault() and event.stopPropagation() call once the event had been fired (or event.stopEvent() in Sencha land) resolved this.

Hope this helps,

-James

like image 30
James Martin Avatar answered Oct 25 '22 02:10

James Martin