设置 iPhone 键盘语言

Posted

技术标签:

【中文标题】设置 iPhone 键盘语言【英文标题】:Setting the iPhone keyboard language 【发布时间】:2010-09-24 17:42:52 【问题描述】:

当用户点击 UITextField 时,我希望 iPhone 虚拟键盘显示为预设为特定语言(例如俄语)。有没有办法在 Cocoa 代码中做到这一点?

【问题讨论】:

【参考方案1】:

这是一个用户定义的设置,不能被程序员弄乱,很遗憾。

【讨论】:

【参考方案2】:

3.1+没有问题。我将此设置为 3.0:

self.searchBar.keyboardType = UIKeyboardTypeURL;

出现语言切换按钮。

【讨论】:

【参考方案3】:

您无法将键盘设置为所需的字符集,但最好的办法是防止用户输入来自任何其他字符集的字符。下面的代表会执行此操作,并且在输入错误字符时还会使 iPhone 的振动器发出嗡嗡声,这可以很好地快速提醒用户他们选择了错误的键盘。这适用于韩语,但很容易修改为其他语言(参见 cmets):

头文件:

#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

【讨论】:

【参考方案4】:

不知道你为什么要这样做——我不会说俄语,如果突然出现俄语键盘,我会有点担心。

用户可以在他们的 iPhone 设置应用中选择他们想要的语言。然后确定当他们点击文本字段时出现哪个键盘。

【讨论】:

如果是俄语词典你就不会惊慌了。 请回答问题,或简单地为问题添加评论【参考方案5】:

我想这样做是因为我正在编写一个语言学习应用程序。

是什么让 iPhone 上的当前键盘选择设置变得更糟(至少对我而言)是它不记得每个应用程序的键盘。因此,如果您为一个应用更改它,它在您打开的下一个应用中仍然是相同的键盘。

【讨论】:

【参考方案6】:

我不知道 iPhone 3.0 SDK,但从 2.x 开始,你无法控制它。但是,您可以做的是制作自定义键盘。还有很多工作要做,但您可以为每种语言重新制作布局。

【讨论】:

【参考方案7】:

回答有关英文键盘的问题 - Apple 确实为此设计 - 您可以使用 ASCII 键盘 - 您可以选择:UIKeyboardTypeASCIICapable。

【讨论】:

以上是关于设置 iPhone 键盘语言的主要内容,如果未能解决你的问题,请参考以下文章

如何设置iphone输入法颜色

不要为网页中的特定文本框显示 iPhone 键盘? [复制]

即使连接了硬件键盘也显示 iPhone 软键盘

iphone弹出键盘时取消滚动动画

iPhone键盘外观神奇变化

iphone如何打出苹果标志