如何找出iOS8上使用的当前键盘?

您可以使用以下方式获取安装在iOS设备上的键盘列表:
NSUserDefaults *userDeafaults = [NSUserDefaults standardUserDefaults];
NSDictionary * userDefaultsDict = [userDeafaults dictionaryRepresentation];
NSLog(@"%@",userDefaultsDict);

这在控制台中产生一些东西,如:

{
    ...
    AppleKeyboards =     (
        "en_US@hw=US;sw=QWERTY","es_ES@hw=Spanish - ISO;sw=QWERTY-Spanish","emoji@sw=Emoji","com.swiftkey.SwiftKeyApp.Keyboard"
    );
    AppleKeyboardsExpanded = 1;
    ...
}

这告诉我,该设备安装了西班牙语,表情符号和SwiftKey键盘,但是当键盘出现时,它将告诉我什么都不会使用.

有没有办法告诉?

解决方法

没有公开的API,但是我发现了一个解决方案,它需要很少的“灰色区域API”(我将API定义为“灰色区域”,如果一个API通常不被暴露,但是可以很少隐藏工作).

iOS有以下类:UITextInputMode

这个类给你所有用户可以使用的输入方法.使用以下查询将会给您当前使用的,只有当键盘打开时:

UITextInputMode* inputMode = [[[UITextInputMode activeInputModes] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"isDisplayed = YES"]] lastObject];

要获取扩展名(或常规Apple键盘)的显示名称,请使用:

[inputMode valueForKey:@"displayName"]

要么

[inputMode valueForKey:@"extendedDisplayName"]

这只有当键盘可见时才有效.所以你必须自己监视输入模式的改变

[[NSNotificationCenter defaultCenter] addObserverForName:UITextInputCurrentInputModeDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note)
 {
     dispatch_async(dispatch_get_main_queue(),^{
         NSLog(@"%@",[[[[UITextInputMode activeInputModes] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"isDisplayed = YES"]] lastObject] valueForKey:@"extendedDisplayName"]);
     });
 }];

我们实际上需要延迟获取当前的输入模式,因为通知是在键盘内部实现使用新值更新系统之前发送的.在下一个循环中获取它的效果很好.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...