ネイティブキーボードを開くたびに、iOS5.xアプリケーションで異なる言語のサポートを提供しようとしています。プログラムでネイティブキーボードでこの言語を提供します。誰かが私にそれをどのようにサポートできますか?カーボンフレームワークを見ましたが、Macアプリ用のようです。
ありがとう。
ネイティブキーボードを開くたびに、iOS5.xアプリケーションで異なる言語のサポートを提供しようとしています。プログラムでネイティブキーボードでこの言語を提供します。誰かが私にそれをどのようにサポートできますか?カーボンフレームワークを見ましたが、Macアプリ用のようです。
ありがとう。
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 プロパティを目的の言語に設定するだけで、カスタム テキスト フィールド クラスでキーボード入力言語を変更できるようになりました。
いいえ、これは不可能です。ユーザーは設定で言語を変更することしかできません。
ただし、選択した場合 (または好みを尋ねた場合)、ユーザーに「英語」キーボードを与えることができます。
次を使用してこれを行います。UIKeyboardTypeASCIICapable
一番下の行にある「地球のアイコン」を押すと、キーボードで直接キーボードを変更できます。
まず、設定でこれらの言語を入力できるようにする必要があります。次に、キーボードの地球ボタンを押すと、それらの言語が切り替わります。
宣言:
@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;
}
}
これは、たとえば、ギリシャ語のキーボードに変更するために機能するようです:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"el", nil]
forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];