2008-12-01 9 views
15

Ich möchte, dass die virtuelle Tastatur des iPhones für eine bestimmte Sprache voreingestellt ist (z. B. Russisch), wenn der Benutzer auf ein UITextField tippt. Gibt es eine Möglichkeit, dies in Cocoa-Code zu tun?Einstellen der iPhone-Tastatursprache

Antwort

7

Dies ist eine benutzerdefinierte Einstellung und kann vom Programmierer leider nicht gestört werden.

0

Nicht sicher, warum Sie das tun möchten - ich spreche kein Russisch, und ich wäre etwas beunruhigt, wenn plötzlich eine russische Tastatur erscheint.

Der Benutzer kann in der App "iPhone-Einstellungen" auswählen, welche Sprache er haben möchte. Dann wird festgelegt, welche Tastatur beim Tippen auf ein Textfeld angezeigt wird.

+5

Sie würden nicht beunruhigt, wenn es Russisch Wörterbuch ist . – Nestor

+0

Bitte beantworten Sie die Frage oder fügen Sie der Frage einfach einen Kommentar hinzu –

0

Ich möchte dies tun, weil ich eine Sprachlernanwendung schreibe.

Was das aktuelle Tastaturauswahl-Setup auf dem iPhone noch schlimmer macht (zumindest für mich) ist, dass es sich nicht an die Tastatur für jede Anwendung erinnert. Wenn Sie es für eine App ändern, bleibt es für die nächste App, die Sie öffnen, dieselbe Tastatur.

0

Ich weiß nicht über iPhone 3.0 SDK, aber ab 2.x können Sie dies nicht kontrollieren. Was Sie jedoch tun können, ist eine benutzerdefinierte Tastatur zu machen. Es ist viel mehr Arbeit, aber Sie könnten die Layouts für jede Sprache neu erstellen.

0

Als Antwort auf die Frage nach englischer Tastatur - Apple hat Design dafür - Sie können die ASCII-Tastatur verwenden - die Sie auswählen können mit: UIKeyboardTypeASCIICapable.

2

Es gibt kein Problem in 3.1+. Ich setze dies für 3,0:

und Sprachwechsel Taste erscheint.

1

Sie können die Tastatur nicht auf den gewünschten Zeichensatz einstellen, aber die nächstbeste Lösung besteht darin, zu verhindern, dass der Benutzer Zeichen aus einem anderen Zeichensatz eingibt. Der Delegierte unten tut dies und summt auch den Vibrator des iPhone, wenn falsche Zeichen eingegeben werden, was gut funktioniert, um den Benutzer schnell zu warnen, dass er die falsche Tastatur ausgewählt hat. Dies ist für koreanische aber leicht für andere Sprachen modifiziert (siehe Kommentare):

Header-Datei:

#import <Foundation/Foundation.h> 
#import <AudioToolbox/AudioToolbox.h> 

@interface KoreanOnlyInput : NSObject <UITextFieldDelegate> 
{ 
    NSMutableCharacterSet* koreanUnicode; 
} 

@end 

.m-Datei:

#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