teclado tamaño personalizar numeros ingles idioma español con como color chino cambiar iphone keyboard

tamaño - teclado con numeros iphone



Detectar el idioma de entrada actual del iPhone (6)

¿Alguien sabe, puedo obtener el idioma de entrada actual y / o la distribución del teclado en la aplicación de iPhone? ¿También puedo recibir una notificación cuando se cambió el idioma de entrada?



En línea con las mejores respuestas, la siguiente es una solución genérica para obtener el idioma del teclado cada vez que se cambia. Regístrese para UITextInputCurrentInputModeDidChangeNotification 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 }

Donde currentFirstResponder es de una categoría en UIView para obtener la primera vista de respuesta, como se sugiere en this publicación SO:

// 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


La forma en que lo haría es la siguiente:

  • Registre su ViewController como oyente en UIApplicationDidBecomeActiveNotification

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];

  • En el controlador applicationDidBecomeActive, verifique el idioma actual usando [NSLocale preferredLanguages] y actúe en consecuencia.

Este enfoque le brinda lo que desea y es totalmente despachable sin tener que usar API privada.


Puede agregar un observador al centro de notificaciones predeterminado:

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

Este método imprime el idioma de entrada seleccionado actualmente (como "de_DE" 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!


Puede solicitar el primer respondedor actual (UITextField, UISearchBar, etc.) a través del método textInputMode de UIResponder:

// assume you have instance variable pointing to search bar currently entering UITextInputMode *inputMode = [self.searchBar textInputMode]; NSString *lang = inputMode.primaryLanguage;


En iOS 4.2 y versiones posteriores, puede usar la clase UITextInputMode para determinar el idioma principal que se usa actualmente para la entrada de texto.

[UITextInputMode currentInputMode].primaryLanguage le proporcionará una NSString representa el código de idioma BCP 47 como "es", "en-US" o "fr-CA".

Puede registrarse para que se le UITextInputCurrentInputModeDidChangeNotification a la UITextInputCurrentInputModeDidChangeNotification cuando cambie el modo de entrada actual.

(Es posible que también esté interesado en la sesión de la WWDC "Cómo preparar sus aplicaciones para China y otros mercados populares nuevos" y los Temas de programación de internacionalización ).