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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
15
0
11 391
7

Ответы 7

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

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

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

Вы бы не испугались, если бы это был русский словарь.

Nestor 03.05.2011 18:58

Пожалуйста, ответьте на вопрос или просто добавьте комментарий к вопросу

Jonas Stawski 04.01.2012 19:55

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

Что делает текущую настройку выбора клавиатуры на 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

Другие вопросы по теме