ユーザーが UITextField をタップしたときに、iPhone の仮想キーボードが特定の言語 (ロシア語など) に事前設定されているように表示されるようにしたいと考えています。Cocoa コードでこれを行う方法はありますか?
7 に答える
これはユーザー定義の設定であり、残念ながらプログラマーが変更することはできません。
3.1以降では問題ありません。私はこれを3.0に設定しました:
self.searchBar.keyboardType = UIKeyboardTypeURL;
言語切り替えボタンが表示されます。
キーボードを目的の文字セットに設定することはできませんが、次善の策は、ユーザーが他の文字セットの文字を入力できないようにすることです。以下のデリゲートはこれを行い、間違った文字が入力されたときに iPhone のバイブレータを鳴らします。これは、間違ったキーボードが選択されていることをユーザーにすばやく警告するのに適しています。これは韓国語用ですが、他の言語用に簡単に変更できます (コメントを参照)。
ヘッダー ファイル:
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
@interface KoreanOnlyInput : NSObject <UITextFieldDelegate>
{
NSMutableCharacterSet* koreanUnicode;
}
@end
.m ファイル:
#import "KoreanOnlyInput.h"
@implementation KoreanOnlyInput
- (id)init
{
self = [super init];
if (self) {
// From http://www.unicodemap.org/ :
// 0x1100 - 0x11FF : Hangul Jamo (256)
// 0x3130 - 0x318F : Hangul Compatibility Jamo (96)
// 0xAC00 - 0xD7A3 : Hangul Syllables (11172)
koreanUnicode = [[NSMutableCharacterSet alloc] init];
NSRange range;
range.location = 0x1100;
range.length = 1 + 0x11FF - range.location;
[koreanUnicode addCharactersInRange:range];
range.location = 0x3130;
range.length = 1 + 0x318F - range.location;
[koreanUnicode addCharactersInRange:range];
range.location = 0xAC00;
range.length = 1 + 0xD7A3 - range.location;
[koreanUnicode addCharactersInRange:range];
}
return self;
}
- (void)dealloc
{
[koreanUnicode release];
[super dealloc];
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
if ([string isEqualToString:@"\n"])
return YES;
BOOL shouldChange = YES;
for (int i=0; i<[string length]; i++)
{
if (![koreanUnicode characterIsMember:[string characterAtIndex:i]])
shouldChange = NO;
}
if (!shouldChange)
{
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
return shouldChange;
}
@end
私は語学学習アプリケーションを書いているので、これをやりたいと思っています。
iPhoneでの現在のキーボード選択設定をさらに悪くしているのは(少なくとも私にとっては)、各アプリケーションのキーボードを記憶していないことです。そのため、あるアプリで変更しても、次に開くアプリでも同じキーボードのままになります。
iPhone 3.0 SDK についてはわかりませんが、2.x の時点では、これを制御することはできません。ただし、できることは、カスタム キーボードを作成することです。手間はかかりますが、言語ごとにレイアウトを作り直すことができます。
英語キーボードに関する質問への回答として - Apple はそのために設計しました - ASCII キーボードを使用できます - 選択できる: UIKeyboardTypeASCIICapable.
なぜこれをしたいのかわからない - 私はロシア語を話さないので、突然ロシア語のキーボードが表示されたら少し心配です.
ユーザーは、iPhone 設定アプリで必要な言語を選択できます。次に、テキスト フィールドをタップしたときに表示されるキーボードを決定します。