iphone - язык - Отображение клавиатуры затем сразу же скрывается при показе MFMessageComposeViewController




предиктивный набор iphone не работает (3)

Я создаю приложение PhoneGap с помощью Cordova 2.2 для IOS. Я испытываю какое-то причудливое поведение при вызове плагина obj-c, который я написал, чтобы показать MFMessageComposeViewController.

Настройка очень проста - у меня есть событие крана, прикрепленное к элементу пользовательского интерфейса, которое при нажатии вызывает вызов моего плагина 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 выглядит великолепно, мои значения предварительно заполнены. Изображение, демонстрирующее интерфейс SMS, выглядит точным при подключении к XCode:

Когда мой iPhone отключен от моего Mac, и приложение запускается с весенней доски , Overlay продвигается вверх, клавиатура начинает скользить вверх, а затем сразу сдвигается вниз, что делает невозможным ввод или отправку сообщения. Это то, на что похоже, когда он не привязан к Mac / Xcode - клавиатура начинает скользить вверх, а затем сразу сдвигается вниз (~ <1 сек), оставляя следующий интерфейс:

Я не могу на всю жизнь понять, что может заставить клавиатуру скрыться, когда не работает с XCode, но отлично работает, когда это так.

Есть ли способ «заставить» клавиатуру отображать или, возможно, поставить весь modalviewcontroller в качестве первого ответчика в той или иной форме или моде?

Любые предложения приветствуются!

Редактировать:

Клавиатура WILL появится снова, если вы нажмете в области контакта


Вы должны добавить MessageUI.framework в свой проект Xcode и включить

#import <MessageUI/MessageUI.h> в вашем файле заголовка.

попробуйте этот код, может быть полезно для вас.

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

Также см. Этот ниже учебник, а также проверьте демо.

  1. Новая обучающая развивающееся-и-проектировании A-PhoneGap-приложение

  2. SMSComposer

Я надеюсь, что это поможет вам ...


Во-первых : Самый вероятный виновник, не видя ваш код, состоит в том, что ваш родительский (представляющий) контроллер представления может иметь действие в своем viewWillDisappear или viewDidDisappear что влияет на того, кто имеет «первого» ответчика. Эти методы вызывают при представлении контроллера вида по модулю. Это может вести себя по-разному на симуляторе, чем устройство из-за синхронизации - часто очень близкие условия синхронизации различаются на устройстве ARM и процессоре i386.

Второе : где-нибудь в вашем приложении регистрируется UIKeyboardWillShowNotification или UIKeyboardDidShowNotification ? Если это так, поместите контрольные точки в методы, которые вызывают в результате - возможно, какой-то другой контроллер в вашей иерархии представлений вмешивается в это.

Чтобы ответить на ваш вопрос ...

Есть ли способ «заставить» клавиатуру отображать или, возможно, поставить весь modalviewcontroller в качестве первого ответчика в той или иной форме или моде?

Нет для обоих. Единственный способ сделать дисплей клавиатуры - вызвать метод becomeFirstResponder для представления ввода. Поскольку Apple не раскрывает текстовое представление, вы не можете отправлять ему сообщения. Установка modalViewController качестве первого ответчика будет устанавливать неправильный объект.


Я столкнулся с этими симптомами с помощью установки Sencha Touch 2.2 и Cordova 2.6.0 (в частности, устройств iOS 6+).

Проблема заключалась в том, что веб-фреймворк уклонялся от родного SMS Composer modal, обычно возникавшего после того, как первый SMS Composer был успешно отображен и закрыт.

event.preventDefault() и event.stopPropagation() после того, как событие было уволено (или event.stopEvent() в Sencha land), разрешило это.

Надеюсь это поможет,

-Джеймс





cordova