iPhone:以编程方式更改键盘语言我打算在打开本机键盘时在iOS 5.x应用程序上提供不同的语言支持。以编程方式在本机键盘中提供此语言。有人可以指导我,我该如何支持它?我看到了碳框架,但看起来像Mac应用程序。
                    
                    
                3 回答
                            慕丝7291255
                            
                                
                            
                        
                        
                                                
                    TA贡献1859条经验 获得超6个赞
你可以从每个UIR应答器的iOS 7开始。UIResponder类中有textInputMode属性。它是readonly,但文档说:
文本输入模式标识响应者处于活动状态时显示的语言和键盘。
对于响应者,系统通常显示基于用户语言首选项的键盘。您可以重新定义此属性,并在您希望响应者使用特定键盘的情况下使用它来返回不同的文本输入模式。用户仍然可以在响应者处于活动状态时更改键盘,但切换到另一个响应者然后返回还原您指定的键盘。
在我的项目中,我创建了一个子类,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 *)语言环境,如下所示:
+ (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属性设置为所需的语言来更改键盘输入语言。
                            慕哥6287543
                            
                                
                            
                        
                        
                                                
                    TA贡献1831条经验 获得超10个赞
我知道这是一个老问题,但这是我改变键盘语言的方法。
这种方式只能将当前键盘更改为在“设置”中添加的键盘。
斯威夫特3:
class CustomTextField: UITextField {
    private func getKeyboardLanguage() -> String? {
        return "en" // here you can choose keyboard any way you need
    }
    override var textInputMode: UITextInputMode? {
        if let language = getKeyboardLanguage() {
            for tim in UITextInputMode.activeInputModes {
                if tim.primaryLanguage!.contains(language) {
                    return tim                }
            }
        }
        return super.textInputMode    }}- 3 回答
 - 0 关注
 - 605 浏览
 
添加回答
举报
0/150
	提交
		取消
	