Подтвердить что ты не робот

Отключить кнопку диктовки на клавиатуре iPhone 4S/новый iPad

Мы - приложение для здравоохранения. В приложении есть распознаватель речи, совместимый с HIPAA, через который может проходить вся дикция. Больницы не хотят, чтобы врачи случайно начали говорить с сервером Nuance Dragon, который не соответствует HIPAA. Итак, я искал способы, которыми я мог бы подавить ключ диктовки на клавиатуре.

Я попытался поместить поддельную кнопку на кнопку "Диктовка" на клавиатуре, но на iPad концепция расколотого док-станции продолжает перемещать микрофон по всему экрану. Это не похоже на разумное решение. Есть ли там эксперты, которые могли бы мне помочь?

4b9b3361

Ответ 1

OKAY, наконец, понял! Хитрость заключается в наблюдении за изменениями UITextInputMode, а затем для сбора идентификатора измененного режима (Код, похоже, не позволяет прямому использованию Private API, хотя, как представляется, требует небольшого знания частного API в целом), а также при изменении режима to dictation, resignFirstResponder (который отменит голосовую диктовку). УРА! Вот какой код:

Где-то в вашем делете приложения (по крайней мере, там, где я его разместил)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(inputModeDidChange:) name:@"UITextInputCurrentInputModeDidChangeNotification"
                                           object:nil];

И тогда вы можете

UIView *resignFirstResponder(UIView *theView)
{
    if([theView isFirstResponder])
    {
        [theView resignFirstResponder];
        return theView;
    }
    for(UIView *subview in theView.subviews)
    {
        UIView *result = resignFirstResponder(subview);
        if(result) return result;
    }
    return nil;
}

- (void)inputModeDidChange:(NSNotification *)notification
{        
    // Allows us to block dictation
    UITextInputMode *inputMode = [UITextInputMode currentInputMode];
    NSString *modeIdentifier = [inputMode respondsToSelector:@selector(identifier)] ? (NSString *)[inputMode performSelector:@selector(identifier)] : nil;

    if([modeIdentifier isEqualToString:@"dictation"])
    {
        [UIView setAnimationsEnabled:NO];
        UIView *resigned = resignFirstResponder(window);
        [resigned becomeFirstResponder];
        [UIView setAnimationsEnabled:YES];

        UIAlertView *denyAlert = [[[UIAlertView alloc] initWithTitle:@"Denied" message:nil delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil] autorelease];
        [denyAlert show];
    }
}

Ответ 2

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

self.myButton.inputView = self.customKeyboardView;

вот пример чрезвычайно настраиваемой клавиатуры

http://blog.carbonfive.com/2012/03/12/customizing-the-ios-keyboard/

В Ray также есть теристический учебник по пользовательским клавиатурам.

http://www.raywenderlich.com/1063/ipad-for-iphone-developers-101-custom-input-view-tutorial

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

Ответ 3

У меня была такая же проблема, и единственный способ найти скрытую кнопку диктовки - это изменить тип клавиатуры. Для меня изменение его на тип электронной почты было разумным:

textField.keyboardType = UIKeyboardTypeEmailAddress;

Ответ 4

Вы можете создать подкласс UITextField/UITextView, который переопределяет insertDictationResult: не вставлять ничего.

Это не помешает отправке информации, но вы можете отобразить предупреждение, информирующее их о казенной части.