iPhone:以编程方式更改键盘语言

我试图提供一个不同的语言支持我的iOS 5.x应用程序,每当本地键盘打开。 用本地键盘以编程方式提供这种语言。 有人可以指导我如何支持它? 我看到了一个碳框架,但看起来像它的Mac应用程序。

谢谢。

不,这是不可能的 – 用户只能在设置中更改他们的语言。

但是,如果您select(或询问他们的偏好),您可以给用户一个“英文”键盘。

你可以这样做:UIKeyboardTypeASCIICapable

您可以通过按下底部行上的“globe icon”直接在键盘上更改键盘。

首先,您必须启用这些语言才能在“设置”中进行input。 然后按下键盘上的全球button将在这些语言之间切换。

你可以在每个UIResponder的基础上从iOS 7开始。 UIResponder类中有textInputMode属性。 它是只读的,但文档说:

文本input模式标识当此响应者处于活动状态时显示的语言和键盘。

对于响应者,系统通常会显示一个基于用户语言偏好的键盘。 您可以重新定义此属性,并在您希望响应者使用特定键盘的情况下使用该属性返回不同的文本input模式。 用户仍然可以在响应者处于活动状态时更换键盘,但切换到另一个响应者,然后恢复您指定的键盘。

在我的项目中,我创build了一个UITextField的子类,并定义了一个名为userDefinedKeyboardLanguage的新属性。 我也覆盖了上面提到的textInputMode方法。 它看起来类似于以下内容:

 - (UITextInputMode *) textInputMode { for (UITextInputMode *tim in [UITextInputMode activeInputModes]) { if ([[Utilities langFromLocale:userDefinedKeyboardLanguage] isEqualToString:[Utilities langFromLocale:tim.primaryLanguage]]) return tim; } return [super textInputMode]; } 

在我的Utilities类中,我也有一个自定义的方法+(NSString *)langFromLocale:(NSString *)locale,如下所示:

 + (NSString *)langFromLocale:(NSString *)locale { NSRange r = [locale rangeOfString:@"_"]; if (r.length == 0) r.location = locale.length; NSRange r2 = [locale rangeOfString:@"-"]; if (r2.length == 0) r2.location = locale.length; return [[locale substringToIndex:MIN(r.location, r2.location)] lowercaseString]; } 

现在我的自定义文本字段类可以简单地通过将userDefinedKeyboardLanguage属性设置为所需的语言来更改键盘input语言。

我知道这是一个老问题,但这里是我改变键盘语言的方法

Swift 3:

 override var textInputMode: UITextInputMode? { let language = type.getKeyboardLanguage() if language.isEmpty { return super.textInputMode } else { for tim in UITextInputMode.activeInputModes { if tim.primaryLanguage!.contains(language) { return tim } } return super.textInputMode } } 

我从我关注的领域select了一种语言

 func getKeyboardLanguage() -> String { switch self { case .one: return "en" case .two: return "ru" case .three: return "" case .four: return "" } } 

例如,这似乎可以改变为希腊键盘:

 [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"el", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize];