iPhone如何以编程方式更改键盘语言?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

我试图在本地键盘打开时在我的iOS 5.x应用程序上提供不同的语言支持。以编程方式在本地键盘中提供此语言。有人可以指导我如何支持它?

提问于
用户回答回答于

不可能的 - 用户只能在设置中更改他们的语言。

用户回答回答于

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

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

在我的项目中,我创建了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属性设置为所需的语言来更改键盘输入语言。

扫码关注云+社区

领取腾讯云代金券