Настройка языка клавиатуры iPhone

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

Ответы

Ответ 1

Это пользовательский параметр и, к сожалению, не может быть запущен программистом.

Ответ 2

Нет проблем в версии 3.1+. Я установил это для версии 3.0:

self.searchBar.keyboardType = UIKeyboardTypeURL;

и кнопка переключения языка.

Ответ 3

Вы не можете настроить клавиатуру на нужный набор символов, но лучше всего будет помешать пользователю вводить символы из любого другого набора символов. Делегат ниже делает это, а также гудит iPhone-вибратор, когда вводятся неправильные символы, что хорошо работает, чтобы быстро предупредить пользователя о том, что у них неправильная клавиатура. Это для корейцев, но легко модифицируется для других языков (см. Комментарии):

Заголовочный файл:

#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>

@interface KoreanOnlyInput : NSObject <UITextFieldDelegate>
{
    NSMutableCharacterSet* koreanUnicode; 
}

@end

.m file:

#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

Ответ 4

Не уверен, почему вы хотите это сделать - я не говорю по-русски, и я был бы немного встревожен, если бы вдруг появилась русская клавиатура.

Пользователь может выбрать, какой язык они хотят в приложении настроек iPhone. Затем он определяет, какая клавиатура появляется, когда они нажимают текстовое поле.

Ответ 5

Я хочу сделать это, потому что я пишу приложение для изучения языка.

Что делает текущую настройку выбора клавиатуры на iPhone еще хуже (по крайней мере для меня) является то, что она не запоминает клавиатуру для каждого приложения. Таким образом, если вы измените его для одного приложения, он останется той же клавиатурой для следующего приложения, которое вы открываете.

Ответ 6

Я не знаю о iPhone 3.0 SDK, но с 2.x вы не можете контролировать это. Однако вы можете сделать обычную клавиатуру. Это намного больше, но вы можете переделать макеты для каждого языка.

Ответ 7

В ответ на вопрос о английской клавиатуре - Apple разработала для этого - вы можете использовать клавиатуру ASCII, которую вы можете выбрать с помощью: UIKeyboardTypeASCIICapable.