Вы не можете установить клавиатуру на нужный вам набор символов, но следующая лучшая вещь - это запретить пользователю вводить символы из любого другого набора символов. Приведенный ниже делегат делает это, а также гудит в вибраторе 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