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?
Desde la Biblioteca de referencia de Apple: " Obtención del idioma y la configuración regional actuales ":
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [languages objectAtIndex:0];
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 ).