iphone - poner - personalizar centro de control ios 10




El teclado muestra y luego se oculta inmediatamente al mostrar MFMessageComposeViewController (3)

Estoy construyendo una aplicación PhoneGap usando Cordova 2.2 para IOS. Estoy experimentando un comportamiento extraño al llamar a un complemento obj-c nativo que he escrito para mostrar el MFMessageComposeViewController.

La configuración es muy simple: tengo un evento tap asociado a un elemento UI, que cuando se presiona, hace una llamada a mi complemento PhoneGap, pasa un número y un mensaje de texto, luego muestra el MFMessageComposeViewController con los parámetros pre-poblados .

Mi javascript se ve así:

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

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

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

    }); 
});

Y mi código obj-c se ve así:

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

}

Entonces, en general, cosas muy simples.

Mi problema es esto:

Cuando mi iPhone está conectado a mi Mac y la aplicación se ejecuta desde XCode , la superposición de Message Composer aparece genial, con mis valores rellenos previamente. La siguiente imagen que muestra la interfaz de SMS aparece bien mientras está conectado a XCode:

Cuando mi iPhone se desenchufa de mi Mac, y la aplicación se ejecuta desde la plataforma de resorte , la cubierta se desliza hacia arriba, el teclado comienza a deslizarse hacia arriba y luego se desliza hacia abajo , lo que hace imposible escribir o enviar el mensaje. Esto es lo que parece cuando no está conectado a Mac / Xcode: el teclado comienza a deslizarse hacia arriba y luego se desliza hacia abajo (~ <seg) dejando la siguiente interfaz:

No puedo, por mi propia vida, descubrir qué podría causar que el teclado se oculte cuando no se ejecuta desde XCode, pero funciona perfectamente cuando es así.

¿Hay alguna manera de 'forzar' que el teclado se muestre, o posiblemente poner todo el modalviewcontroller como primer respondedor de alguna forma o forma?

¡Cualquier sugerencia es apreciada!

Editar:

El teclado aparecerá de nuevo si hace clic en el área de contacto

https://code.i-harness.com


Debe agregar MessageUI.framework a su proyecto de Xcode e incluir un

#import <MessageUI/MessageUI.h> en su archivo de encabezado.

prueba este código puede ser útil para ti ..

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

También consulte este tutorial a continuación y también verifique la demostración.

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

  2. SMSComposer

Espero que esto te ayude...


Primero : El culpable más probable, sin ver su código, es que su controlador de vista padre (que presenta) puede tener una acción en su vista viewWillDisappear o viewDidDisappear que muestra quién tiene el "primer" respondedor. Se llama a estos métodos cuando se presenta un controlador de vista de manera modal. Puede que se comporte de manera diferente en el simulador que en el dispositivo debido a la sincronización: a menudo, las condiciones de temporización realmente cercanas son diferentes en el dispositivo ARM y en el procesador i386.

Segundo : ¿Se registra en UIKeyboardWillShowNotification parte de tu aplicación el UIKeyboardWillShowNotification o el UIKeyboardDidShowNotification ? Si es así, coloque los puntos de corte en los métodos que se llaman como resultado; es posible que algún otro controlador en su jerarquía de vista esté interfiriendo con este.

Para responder tu pregunta...

¿Hay alguna manera de 'forzar' que el teclado se muestre, o posiblemente poner todo el modalviewcontroller como primer respondedor de alguna forma o forma?

No a ambos. La única forma de mostrar el teclado es llamar al método becomeFirstResponder de la vista de entrada. Como Apple no expone la vista de texto, no puede enviar mensajes. Configurar el modalViewController como primera respuesta sería establecer el objeto equivocado.


Encontré estos síntomas con una instalación Sencha Touch 2.2 y Cordova 2.6.0 (específicamente, dispositivos iOS 6+).

El problema era que el marco web robaba el enfoque del modo nativo de SMS Composer, que se produce normalmente después de que se haya mostrado y cerrado correctamente el primer modalizador de SMS Composer.

Una event.preventDefault() y event.stopPropagation() una vez que el evento haya sido disparado (o event.stopEvent() en tierra Sencha) resolvió esto.

Espero que esto ayude,

-James





cordova