voz teclado solo por palabras funciona eliminar dictado diccionario descargar desbloquear desactivar deja control cambiar activado activa iphone objective-c ios ipad

solo - teclado iphone 7



Desactive el botón Dictado en el teclado del iPhone 4S/nuevo iPad (5)

La nuestra es una aplicación de salud. Tenemos un reconocedor de voz compatible con HIPAA en la aplicación a través del cual se puede llevar a cabo todo el dictado. Los hospitales no quieren que los médicos comiencen a hablar accidentalmente con el servidor de Nuance Dragon que no es compatible con HIPAA. Entonces, estaba buscando formas de suprimir la tecla de dictado del teclado.

Intenté colocar un botón falso en el botón Dictado del teclado, pero en el iPad el concepto de base dividida sigue moviendo el micrófono por toda la pantalla. Esto no suena como una solución razonable. ¿Hay algún experto que pueda ayudarme?


Esta es una solución Swift 4 basada en el pirateo de @ BadPirate. Activará el sonido de campana inicial que indica que el dictado comenzó, pero el diseño del dictado nunca aparecerá en el teclado.

Esto no ocultará el botón de dictado de su teclado: para eso, la única opción parece ser utilizar un diseño de correo electrónico con UIKeyboardType.emailAddress .

En viewDidLoad del controlador de vista que posee el UITextField para el que desea deshabilitar el dictado:

// Track if the keyboard mode changed to discard dictation NotificationCenter.default.addObserver(self, selector: #selector(keyboardModeChanged), name: UITextInputMode.currentInputModeDidChangeNotification, object: nil)

Luego el callback personalizado:

@objc func keyboardModeChanged(notification: Notification) { // Could use `Selector("identifier")` instead for idSelector but // it would trigger a warning advising to use #selector instead let idSelector = #selector(getter: UILayoutGuide.identifier) // Check if the text input mode is dictation guard let textField = yourTextField as? UITextField let mode = textField.textInputMode, mode.responds(to: idSelector), let id = mode.perform(idSelector)?.takeUnretainedValue() as? String, id.contains("dictation") else { return } // If the keyboard is in dictation mode, hide // then show the keyboard without animations // to display the initial generic keyboard UIView.setAnimationsEnabled(false) textField.resignFirstResponder() textField.becomeFirstResponder() UIView.setAnimationsEnabled(true) // Do additional update here to inform your // user that dictation is disabled }


OKAY, finalmente lo tengo! El truco consiste en observar las notificaciones de cambio de UITextInputMode y luego recopilar el identificador del modo cambiado (el Código parece evitar el uso directo de la API privada, aunque parece que requiere un poco de conocimiento de la API privada en general), y cuando el modo cambia a dictado, resignFirstResponder (que cancelará el dictado de voz). ¡HURRA! Aquí hay un código:

En algún lugar de tu aplicación, delegado (al menos ahí es donde lo puse)

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

Y luego puedes

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


Podría crear una subclase de UITextField / UITextView que invalide insertDictationResult: para no insertar nada.

Esto no evitará que la información se envíe, pero luego podría mostrar una alerta informándoles sobre la recámara.


Tuve el mismo problema y la única forma en que encontré que oculta el botón de dictado es cambiar el tipo de teclado. Para mí, cambiarlo al tipo de correo electrónico me pareció razonable:

textField.keyboardType = UIKeyboardTypeEmailAddress;


puede crear su propio teclado y configurar el inputView para los campos de texto que aceptarán este dictado. luego, cuando presionen cualquier tecla obtendrán su teclado, por lo tanto, no tendrá que anular las teclas del teclado estándar, podrá personalizar todo.

self.myButton.inputView = self.customKeyboardView;

Aquí hay un ejemplo de un teclado extremadamente personalizado.

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

Ray también tiene un tutorial teriffic sobre teclados personalizados.

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

Espero que eso ayude.