Настройка языка клавиатуры iPhone - PullRequest
15 голосов
/ 01 декабря 2008

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

Ответы [ 7 ]

7 голосов
/ 01 декабря 2008

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

2 голосов
/ 23 октября 2009

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

self.searchBar.keyboardType = UIKeyboardTypeURL;

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

1 голос
/ 03 мая 2011

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

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

0 голосов
/ 12 мая 2009

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

0 голосов
/ 08 декабря 2008

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

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

0 голосов
/ 01 декабря 2008

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

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

...