42

ネイティブキーボードを開くたびに、iOS5.xアプリケーションで異なる言語のサポートを提供しようとしています。プログラムでネイティブキーボードでこの言語を提供します。誰かが私にそれをどのようにサポートできますか?カーボンフレームワークを見ましたが、Macアプリ用のようです。

ありがとう。

4

7 に答える 7

47

UIResponder ごとに iOS 7 から開始できます。UIResponder クラスには textInputMode プロパティがあります。読み取り専用ですが、ドキュメントには次のように記載されています。

テキスト入力モードは、このレスポンダーがアクティブなときに表示される言語とキーボードを識別します。

応答者の場合、システムは通常、ユーザーの言語設定に基づくキーボードを表示します。レスポンダに特定のキーボードを使用させたい場合は、このプロパティを再定義して、別のテキスト入力モードを返すために使用できます。ユーザーは、レスポンダーがアクティブな間でもキーボードを変更できますが、別のレスポンダーに切り替えてから元に戻すと、指定したキーボードが復元されます。

私のプロジェクトでは、サブクラスを作成し、UITextFielduserDefinedKeyboardLanguage という新しいプロパティを定義しました。上記の 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 プロパティを目的の言語に設定するだけで、カスタム テキスト フィールド クラスでキーボード入力言語を変更できるようになりました。

于 2014-05-01T06:40:26.377 に答える
6

いいえ、これは不可能です。ユーザーは設定で言語を変更することしかできません。

ただし、選択した場合 (または好みを尋ねた場合)、ユーザーに「英語」キーボードを与えることができます。

次を使用してこれを行います。UIKeyboardTypeASCIICapable

一番下の行にある「地球のアイコン」を押すと、キーボードで直接キーボードを変更できます。

まず、設定でこれらの言語を入力できるようにする必要があります。次に、キーボードの地球ボタンを押すと、それらの言語が切り替わります。

于 2012-09-26T06:45:09.163 に答える
5

宣言:

@IBOutlet var yourTextField:cTextField!;

使用する:

yourTextField.languageCode = "ru";

クラス cTextField:

class cTextField: UITextField {

    // ru, en, ....
    var languageCode:String?{
        didSet{
            if self.isFirstResponder{
                self.resignFirstResponder();
                self.becomeFirstResponder();
            }
        }
    }

    override var textInputMode: UITextInputMode?{
        if let language_code = self.languageCode{
            for keyboard in UITextInputMode.activeInputModes{
                if let language = keyboard.primaryLanguage{
                    let locale = Locale.init(identifier: language);
                    if locale.languageCode == language_code{
                        return keyboard;
                    }
                }
            }
        }
        return super.textInputMode;
    }
}
于 2018-06-04T14:17:00.970 に答える
3

これは、たとえば、ギリシャ語のキーボードに変更するために機能するようです:

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

[[NSUserDefaults standardUserDefaults] synchronize]; 
于 2012-11-16T16:35:52.673 に答える