代码之家  ›  专栏  ›  技术社区  ›  Peter

设置iPhone键盘语言

  •  15
  • Peter  · 技术社区  · 16 年前

    我希望当用户点击UITextField时,iPhone的虚拟键盘能预先设置成特定的语言(例如俄语)。在Cocoa代码中有这样做的方法吗?

    7 回复  |  直到 16 年前
        1
  •  7
  •   adam    16 年前

    不幸的是,这是一个用户定义的设置,程序员无法处理。

        2
  •  2
  •   slatvick    15 年前

    self.searchBar.keyboardType = UIKeyboardTypeURL;
    

        3
  •  1
  •   Nestor    14 年前

    您无法将键盘设置为所需的字符集,但接下来最好的做法是防止用户从任何其他字符集输入字符。下面的代表会这样做,并且在输入不正确的字符时会蜂鸣器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
    
        4
  •  0
  •   August    16 年前

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

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

        5
  •  0
  •   Peter    16 年前

        6
  •  0
  •   aehlke    16 年前

    我不知道iPhone 3.0sdk,但是从2.x开始,你不能控制它。但是,您可以做的是定制键盘。这是很多工作,但你可以重新为每种语言的布局。

        7
  •  0
  •   Grouchal    16 年前

    推荐文章