当用户点击 UITextField 时,我希望 iPhone 虚拟键盘显示为预设为特定语言(例如俄语)。有没有办法在 Cocoa 代码中做到这一点?
7 回答
不幸的是,这是用户定义的设置,不能被程序员弄乱。
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
我想这样做是因为我正在编写一个语言学习应用程序。
是什么让 iPhone 上的当前键盘选择设置变得更糟(至少对我而言)是它不记得每个应用程序的键盘。因此,如果您为一个应用程序更改它,它对于您打开的下一个应用程序仍然是相同的键盘。
不知道你为什么要这样做——我不会说俄语,如果突然出现俄语键盘,我会有点担心。
用户可以在他们的 iPhone 设置应用程序中选择他们想要的语言。然后确定当他们点击文本字段时出现哪个键盘。
在回答关于英文键盘的问题时——Apple 确实为此设计了——你可以使用 ASCII 键盘——你可以选择:UIKeyboardTypeASCIICapable。
我不知道 iPhone 3.0 SDK,但从 2.x 开始,你无法控制它。但是,您可以做的是制作自定义键盘。这是更多的工作,但您可以重新制作每种语言的布局。