¿Alguien sabe, puedo obtener el idioma de entrada actual y/o el diseño del teclado en la aplicación de iPhone? ¿Puedo recibir una notificación cuando se modificó el idioma de entrada?Detectando el idioma actual de entrada de iPhone
Respuesta
Desde la Biblioteca de Apple de referencia - "Getting the Current Language and Locale":
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [languages objectAtIndex:0];
'[NSLocale preferredLanguages] 'es la forma oficial de obtener la lista de idiomas preferidos. Pero creo que @Danya quiere es el nombre del diseño actual del teclado. Eso es otra cosa. –
Exactamente. Necesito cambiar el contenido de la vista dependiendo del idioma de entrada actual. Por lo tanto, necesito tener una forma de obtener el idioma actual del teclado, así como una notificación cuando el usuario presiona el botón del teclado para cambiar el idioma. –
Esto es útil, porque [NSLocale currentLocale] no le proporcionará el idioma de UI del usuario. – leviathan
Puede agregar un observador al centro de notificación por defecto:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(inputModeDidChange:)
name:@"UIKeyboardCurrentInputModeDidChangeNotification"
object:nil];
Este método imprime el idioma de entrada seleccionado en ese momento (como "en_US"
o "de_DE"
):
- (void)inputModeDidChange:(NSNotification*)notification
{
id obj = [notification object];
if ([obj respondsToSelector:@selector(inputModeLastUsedPreference)]) {
id mode = [obj performSelector:@selector(inputModeLastUsedPreference)];
NSLog(@"mode: %@", mode);
}
}
PERO: ¡Todo lo anterior no está documentado y no debe usarlo en el código de envío!
Explique el voto a la baja. –
Es posible que haya obtenido el neg porque está describiendo código que no se puede enviar con el SDK. –
Interesante, pero no útil, si de hecho no puedo usar el código de "envío". – bentford
La forma en que lo haría es el siguiente:
Registre su ViewController como oyente a
UIApplicationDidBecomeActiveNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
En manejador applicationDidBecomeActive, comprobar el idioma actual usando
[NSLocale preferredLanguages]
y actuar de acuerdo a esto.
Este enfoque le proporciona lo que desea y es totalmente realizable sin tener que utilizar una API privada.
Esto devuelve el idioma de la interfaz de usuario, no el idioma de entrada/teclado. – nschum
En iOS 4.2 y posterior, puede utilizar la clase UITextInputMode
para determinar el idioma principal que se utiliza actualmente para la entrada de texto.
[UITextInputMode currentInputMode].primaryLanguage
le dará un NSString
que representa el código de idioma BCP 47 como "es", "en-US" o "fr-CA".
Puede registrarse para el UITextInputCurrentInputModeDidChangeNotification
para recibir una alerta cuando cambie el modo de entrada actual.
(Usted también puede estar interesado en la sesión "Getting Your Apps Ready for China and other Hot New Markets" WWDC, y Internationalization Programming Topics.)
+1 Buena adición a esta publicación anterior. –
Desaprobado desde iOS7. –
Como este método está en desuso en iOS7, es mejor utilizar el método actual de respuesta inmediata ** textInputMode **. Su trabajo es el mismo Ver mi respuesta – kirander
Puede pedir actual primer nivel de respuesta (UITextField, UISearchBar, etc.) a través del método UIResponder textInputMode:
// assume you have instance variable pointing to search bar currently entering
UITextInputMode *inputMode = [self.searchBar textInputMode];
NSString *lang = inputMode.primaryLanguage;
¡Buena respuesta! ... –
En línea con las respuestas principales, la siguiente es una solución genérica para obtener el idioma del teclado cada vez que se cambia.Registrarse para la notificación UITextInputCurrentInputModeDidChangeNotification
:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(inputModeDidChange:) name:UITextInputCurrentInputModeDidChangeNotification object:nil];
Luego, en inputModeDidChange
-(void)inputModeDidChange:(NSNotification *)notification {
UIView *firstResponder = [UIView currentFirstResponder];
UITextInputMode *currentInputMode = firstResponder.textInputMode;
NSString *keyboardLanguage = [currentInputMode primaryLanguage];
NSLog(@"%@", keyboardLanguage); // e.g. en-US
}
Dónde currentFirstResponder
es de una categoría de UIView para obtener el primer punto de vista de respuesta, como se sugiere en this SO mensaje:
// UIView+Additions.h
#import <UIKit/UIKit.h>
@interface UIView (Additions)
+ (id)currentFirstResponder;
@end
Implementación
// UIView+Additions.m
#import "UIView+Additions.h"
static __weak id currentFirstResponder;
@implementation UIView (Additions)
+ (id)currentFirstResponder {
currentFirstResponder = nil;
// This will invoke on first responder when target is nil
[[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:)
to:nil
from:nil
forEvent:nil];
return currentFirstResponder;
}
- (void)findFirstResponder:(id)sender {
// First responder will set the static variable to itself
currentFirstResponder = self;
}
@end
- 1. Detectando el tipo de interrupción de iPhone
- 2. ¿Detectando soplar en el micrófono de iPhone?
- 3. idioma resaltado actual de vim
- 4. detectando un toque largo en el iPhone
- 5. Detectando si el diálogo de entrada de archivo está abierto
- 6. Obtenga el idioma actual en C#
- 7. Obtener el idioma actual en CultureInfo
- 8. Buscar el idioma actual del usuario
- 9. Encuentra el idioma del teclado Android actual
- 10. iPhone: Detectando Tap en MKMapView
- 11. ¿Cómo puedo encontrar el idioma de Windows actual de cmd?
- 12. Localización: ¿cómo obtener el idioma actual del usuario?
- 13. Ir a idioma en el iPhone
- 14. Detectando el interruptor de silencio del iPhone en iOS 5
- 15. iPhone - el parámetro de entrada al método sizeThatFits de UIView
- 16. Cómo detectar el idioma actual de un Joomla! ¿sitio web?
- 17. iOS: cómo obtener el idioma actual de la aplicación
- 18. Drupal: cómo cambiar el idioma actual de la taxonomía
- 19. Detectando entrada nula/vacía del usuario
- 20. Localización de iPhone: ¿recibe el código de idioma del teléfono?
- 21. Uso de un idioma diferente para las vistas del sistema que el idioma actual del dispositivo
- 22. ¿Cómo agregar una entrada de idioma adicional a Android?
- 23. Detectando la entrada IME antes de ingresar presionado en Javascript
- 24. ¿Cómo arreglar el idioma inglés en un cuadro de texto específico en el modo de idioma de entrada en árabe?
- 25. Detectando si los auriculares están enchufados en el iPhone
- 26. iPhone - Detectando si el dispositivo tiene una cámara frontal
- 27. Detectando programáticamente si hay una aplicación instalada en el iPhone
- 28. Verifique si los artículos existen en el idioma actual?
- 29. ¿Cómo encontrar un día actual en el idioma c?
- 30. Detectando el idioma del navegador y evitando la excepción de nullreference
Respuesta más reciente: http://stackoverflow.com/questions/3860553/is-it-possible-to-detect-the-current-keyboard-input-method-on-the-iphone –
Es posible que desee mira este enlace http://razibdeb.wordpress.com/2013/01/30/how-to-check-whether-a-character-is-from-english-language-or-not-in-objective-c/ –