尽pipe德语硬件键盘,iOS8.1模拟器总是使用美国键盘布局

出于某种原因,我不能用我的本地德语键盘input文本到iOS模拟器。

下载XCode 6.1(其中包含iOS 8.1)后,我坚持美国布局。

我尝试了更改所有硬件/键盘设置,删除〜/ Library / Preferences / com.apple.iphonesimulator.plist,并重置iOS模拟器。

没有帮助!

我应该重新安装完整的软件包吗?

这是iOS 8.1模拟器的错误。

我可以通过在使用的scheme中设置“应用程序语言”来testing语言。

转到产品>计划>编辑计划…或按cmd + Y.

资料来源: 苹果开发者论坛坂本义弘的答复

在这里输入图像说明

这是iOS 8.1模拟器运行时间的已知问题,在Xcode 6.1发行说明中提到:

本地化和键盘设置(包括第三方键盘)在iOS 8.1 Simulator中未被Safari,地图和开发人员应用正确认可。 [NSLocale currentLocale]返回en_US,只有英文和表情符号键盘可用。 (18418630,18512161)

其他偏好也是如此,这些偏好会影响所有应用程序,而不仅仅是区域设置(例如:键盘设置)。

正如iOS SDK 8.2 beta 2发行说明中提到的,这个问题应该在iOS 8.2中解决:

在beta 2中修复其他键盘(包括第三方键盘)可能不会出现在iOS模拟器的Safari,Maps或第三方应用程序中

如果您需要使用iOS 8.1,则应该能够在某些应用程序中使用德语布局,但不能使用其他应用程序。 例如,Safari和Maps是两个不适用的应用程序示例。

在苹果修复之前,可以使用以下基于NSLocale swizzling检查解决scheme。

实际上我们只需要在iOS8.1模拟器中replace错误的currentLocale

将类别附加到项目并将其添加到.pch文件中( 不要忘记清除并重build项目 )。

 // NSLocale+ios8.h // Created by Alexey Matveev on 01.11.2014. // Copyright (c) 2014 Alexey Matveev. All rights reserved. #if TARGET_IPHONE_SIMULATOR // define here your locale identifier: de_DE, ru_RU, etc #define LOCALE_IDENTIFIER @"de_DE" @interface NSLocale (iOS8) @end #endif // NSLocale+ios8.m // Created by Alexey Matveev on 01.11.2014. // Copyright (c) 2014 Alexey Matveev. All rights reserved. #if TARGET_IPHONE_SIMULATOR #import "NSLocale+ios8.h" #import <objc/runtime.h> @implementation NSLocale (iOS8) + (void)load { Method originalMethod = class_getClassMethod(self, @selector(currentLocale)); Method swizzledMethod = class_getClassMethod(self, @selector(swizzled_currentLocale)); method_exchangeImplementations(originalMethod, swizzledMethod); } + (NSLocale*)swizzled_currentLocale { return [NSLocale localeWithLocaleIdentifier:LOCALE_IDENTIFIER]; } @end #endif 

希望你现在看到一样的

iOS8模拟器与德国键盘的屏幕截图

还有一件事,使用这种方法你会得到一个不愉快的副作用:通过类别区域设置select的键盘始终在使用中,不依赖于系统设置和键盘添加。 所以模拟器设置重置不需要再次添加键盘。

类别方法允许一次覆盖所有目标的语言和区域设置,而不用单独改变每个目标scheme中的这些参数。

在你的目标去编辑计划 – >select你的应用程序郎和应用程序区域(德语)。 软件键盘开关布局确定,硬件否)

还有另一个已知的问题,导致键盘不能在模拟器中显示。

键盘已知问题其他键盘(包括第三方键盘)可能不会出现在模拟器上的Safari,地图或第三方应用程序中。

解决方法:键盘应该在日历,Spotlight,联系人和照片中进行testing。

我解释这意味着你的封闭的应用程序也不会工作。 我的键盘不会显示在Safari或地图,但在照片search栏中工作正常。

@malex'解决scheme通过swizzling currentLocale并将其添加到.pch文件几乎为我做了诡计。 它启用了语言环境键盘(丹麦语),但它并没有使它成为默认的键盘。

为了使它成为默认的键盘,我不得不调用NSLocale上的preferredLanguages方法。

谢谢@malex。

总的来说,结果是:

 @interface NSLocale (iOS8) @end @implementation NSLocale (iOS8) + (void)load { Method originalCurrentLocale = class_getClassMethod(self, @selector(currentLocale)); Method swizzledCurrentLocale = class_getClassMethod(self, @selector(swizzled_currentLocale)); method_exchangeImplementations(originalCurrentLocale, swizzledCurrentLocale); Method originalPreferredLanguages = class_getClassMethod(self, @selector(preferredLanguages)); Method swizzledPreferredLanguages = class_getClassMethod(self, @selector(swizzled_preferredLanguages)); method_exchangeImplementations(originalPreferredLanguages, swizzledPreferredLanguages); } + (NSLocale *)swizzled_currentLocale { return [NSLocale localeWithLocaleIdentifier:@"da_DK"]; } + (NSArray *)swizzled_preferredLanguages { return @[@"da"]; } @end 

作为上述修补程序的替代方法,可以使用环境variables作为解决方法。

在Xcode上添加一个环境variables,比如说:“edit scheme> arguments> environment variables”下的“myLocale”。

(确保在你想强制你喜欢的语言环境时启用环境variables) 在这里输入图像说明

在你的代码中,你可以添加一个条件来检查环境variables是否被启用。

 NSString *locale = [[[NSProcessInfo processInfo] environment] objectForKey:@"myLocale"]; if (locale) { NSLog(@"Using environment variable for locale"); } else{ NSLog(@"Using locale configured from settings"); } 

在“设置”应用程序的“常规”>“键盘”>“键盘”下,点击(单击)“添加新键盘”

在这里输入图像说明

如果你的意思是模拟器不接受你的硬件键盘的input,你需要连接它(command-shift-K):

在这里输入图像说明

这是在硬件>键盘菜单。