Я бы хотел, чтобы виртуальная клавиатура iPhone отображалась предварительно настроенной на определенный язык (например, русский), когда пользователь нажимает UITextField. Есть ли способ сделать это в коде Какао?





Это параметр, определяемый пользователем, и, к сожалению, программист не может изменить его.
Не знаю, зачем вам это нужно - я не говорю по-русски, и я был бы немного встревожен, если бы вдруг появилась русская клавиатура.
Пользователь может выбрать нужный язык в приложении «Настройки iPhone». Затем это определяет, какая клавиатура появляется при касании текстового поля.
Пожалуйста, ответьте на вопрос или просто добавьте комментарий к вопросу
Я хочу это сделать, потому что пишу приложение для изучения языка.
Что делает текущую настройку выбора клавиатуры на iPhone еще хуже (по крайней мере, для меня), так это то, что она не запоминает клавиатуру для каждого приложения. Таким образом, если вы измените ее для одного приложения, она останется той же клавиатурой для следующего приложения, которое вы откроете.
Я не знаю о SDK для iPhone 3.0, но с версии 2.x вы не можете это контролировать. Однако вы можете создать собственную клавиатуру. Это намного больше работы, но вы можете переделать макеты для каждого языка.
В ответ на вопрос об английской клавиатуре - Apple разработала для этого дизайн - вы можете использовать клавиатуру ASCII, которую вы можете выбрать с помощью: UIKeyboardTypeASCIICapable.
В 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
Вы бы не испугались, если бы это был русский словарь.