Показывать программную клавиатуру iPhone, даже если подключена аппаратная клавиатура - PullRequest
22 голосов
/ 24 июля 2010

В приложении для iPad используется внешнее «устройство», которое выполняет функцию аппаратной клавиатуры. Но в какой-то момент в настройках мне нужно ввести текст, и я не могу использовать «устройство» («устройство» не клавиатура). Итак, есть ли способ заставить программную клавиатуру выдвигаться, даже если у меня подключена аппаратная клавиатура?

Ответы [ 4 ]

20 голосов
/ 01 октября 2010

Да. Мы делали это в нескольких наших приложениях, когда у пользователя есть «клавиатура» сканера Bluetooth, сопряженная с устройством. Что вы можете сделать, так это убедиться, что у вашего textField есть inputAccessoryView, а затем принудительно установить фрейм inputAccessoryView. Это приведет к отображению клавиатуры на экране.

Мы добавили следующие две функции в наш AppDelegate. Переменная inputAccessoryView - это UIView *, который мы объявили в нашем делегате приложения:

//This function responds to all textFieldBegan editing
// we need to add an accessory view and use that to force the keyboards frame
// this way the keyboard appears when the scanner is attached
-(void) textFieldBegan: (NSNotification *) theNotification
{
    UITextField *theTextField = [theNotification object];
    //  NSLog(@"textFieldBegan: %@", theTextField);

    if (!inputAccessoryView) {
        inputAccessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, navigationController.view.frame.size.width, 1)];
    }

    theTextField.inputAccessoryView = inputAccessoryView;

    [self performSelector:@selector(forceKeyboard) withObject:nil afterDelay:0];
}

//Change the inputAccessoryView frame - this is correct for portrait, use a different
// frame for landscape
-(void) forceKeyboard
{
    inputAccessoryView.superview.frame = CGRectMake(0, 759, 768, 265);
}

Затем в нашем applicationDidFinishLaunching мы добавили этот наблюдатель уведомлений, чтобы мы могли получать событие в любое время, когда текстовое поле начало редактироваться

    //Setup the textFieldNotifications
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldBegan:) name:UITextFieldTextDidBeginEditingNotification object:nil];

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

1 голос
/ 28 сентября 2010

Нет способа сделать это с текущим SDK. Пожалуйста, сообщите Apple через Bug Reporter .

0 голосов
/ 05 марта 2018

Когда мое приложение подключает устройство Bluetooth, клавиатура не отображается. Я пытаюсь установить принудительную настройку фрейма InputAccessoryView, как говорит Брайан Роббинс. Это не сработало.

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

Если вы хотите провести симуляцию касания, отметьте это. https://github.com/HUYU2048/PTFakeTouch

0 голосов
/ 13 августа 2010

Поскольку у меня та же проблема, самое близкое решение, которое я нашел, - это использовать приложение Эрики Садун под названием KeysPlease , которое доступно через cydia и modmyi. Это описание «Используйте soft kb даже при подключении к BT kb.».

Кроме того, я обнаружил, что если у вас также есть физическая клавиатура, в моем случае через документ на клавиатуре iPad вы можете вызвать клавиатуру с помощью клавиши, которая, по-видимому, отображается на клавише извлечения на клавиатуре Bluetooth. Возможно, есть способ ввести эту клавишу, как если бы она была нажата на подключенной клавиатуре?

Мне бы очень хотелось, чтобы для этого было более официальное решение для кодирования.

...