2008-12-01 138 views
15

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

回答

7

这是一个用户定义的设置,不幸的是程序员不能搞乱。

0

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

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

+5

如果它是俄语字典你不会惊慌。 – Nestor 2011-05-03 14:58:53

0

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

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

0

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

0

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

2

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

self.searchBar.keyboardType = UIKeyboardTypeURL; 

和语言切换按钮出现。

1

您不能将键盘设置为所需的字符集,但下一个最好的办法是防止用户输入任何其他字符集中的字符。下面的代表可以做到这一点,当输入不正确的字符时,它还会响应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