iphone - Le clavier montre alors se cache immédiatement lors de l'affichage de MFMessageComposeViewController




cordova xcode 10 (3)

Je construis une application PhoneGap en utilisant Cordova 2.2 pour IOS. Je rencontre un comportement bizarre lors de l'appel à un plugin natif obj-c que j'ai écrit pour afficher le MFMessageComposeViewController.

La configuration est très simple - J'ai un événement tap attaché à un élément de l'interface utilisateur, qui, lorsqu'il est pressé, fera un appel à mon plugin PhoneGap, passer avec un numéro et un message texte, puis afficher le MFMessageComposeViewController avec les paramètres pré-remplis .

Mon javascript ressemble à ceci:

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

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

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

    }); 
});

Et mon code obj-c ressemble à ceci:

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

}

Donc, dans l'ensemble, des choses très simples.

Mon problème est le suivant:

Lorsque mon iPhone est branché sur mon Mac et que l'application est exécutée à partir de XCode , la superposition de Message Composer apparaît géniale, mes valeurs étant pré-remplies. L'image ci-dessous démontrant l'interface SMS apparaît bien lorsqu'elle est branchée sur XCode:

Lorsque mon iPhone est débranché de mon Mac, et que l'application est lancée à partir du tremplin , l'Overlay glisse, le clavier commence à glisser vers le haut, puis glisse vers le bas - rendant impossible la saisie ou l'envoi du message. C'est à quoi ça ressemble quand il n'est pas attaché au Mac / Xcode - le clavier commence à glisser vers le haut puis glisse immédiatement (~ <1 sec) en laissant l'interface suivante:

Je ne peux pas pour la vie de moi comprendre ce qui ferait que le clavier se cache quand ne fonctionne pas à partir de XCode, mais fonctionne parfaitement bien quand il est.

Y a-t-il un moyen de forcer le clavier à afficher, ou peut-être de mettre tout le modalviewcontroller en premier répondant d'une manière ou d'une autre?

Toutes les suggestions sont appréciées!

Modifier:

Le clavier apparaîtra à nouveau si vous cliquez dans la zone de contact


Vous devez ajouter MessageUI.framework à votre projet Xcode et inclure un

#import <MessageUI/MessageUI.h> dans votre fichier d'en-tête.

essayez ce code peut être son utile pour vous ..

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

Reportez-vous également à ce tutoriel ci-dessous et vérifiez également la démo.

  1. new-tutorial-development-et-architecture-a-phonegap-application

  2. SMSComposer

J'espère que cela vous aidera ...


Premièrement : Le coupable le plus probable, sans voir votre code, est que votre contrôleur de vue parent (présentant) peut avoir une action dans son viewWillDisappear ou viewDidDisappear qui affecte qui a le "premier" répondeur. Ces méthodes sont appelées lors de la présentation modale d'un contrôleur de vue. Il peut se comporter différemment sur le simulateur que l'appareil en raison de la synchronisation - souvent les conditions de synchronisation très proches sont différentes sur le périphérique ARM et le processeur i386.

Deuxièmement : Est-ce que n'importe où dans votre application inscrivez-vous au UIKeyboardWillShowNotification ou au UIKeyboardDidShowNotification ? Si tel est le cas, placez des points d'arrêt dans les méthodes appelées en conséquence - il est possible qu'un autre contrôleur de votre hiérarchie interfère avec celui-ci.

Pour répondre à ta question...

Y a-t-il un moyen de forcer le clavier à afficher, ou peut-être de mettre tout le modalviewcontroller en premier répondant d'une manière ou d'une autre?

Non aux deux. La seule façon de faire apparaître le clavier est d'appeler la méthode becomeFirstResponder de la vue d'entrée. Comme Apple n'expose pas la vue de texte, vous ne pouvez pas lui envoyer de messages. Définir le modalViewController tant que premier répondeur ne modalViewController pas le bon objet.


J'ai rencontré ces symptômes avec une configuration Sencha Touch 2.2 et Cordova 2.6.0 (en particulier, les appareils iOS 6+).

Le problème résidait dans le fait que le cadre Web détournait l'attention de la modalité native de SMS Composer, généralement après l'affichage et la fermeture du premier modificateur SMS Composer.

Un event.preventDefault() et event.stopPropagation() une fois que l'événement a été déclenché (ou event.stopEvent() dans Sencha land) a résolu ce event.stopEvent() .

J'espère que cela t'aides,

-James





cordova