2012-12-22 4 views
2

J'ai un champ de texte qui est supposé contenir uniquement des caractères emoji. Est-il possible de limiter le clavier de l'utilisateur à une entrée emoji uniquement, c'est-à-dire désactiver les autres claviers?Limiter le clavier à Emoji

+1

Chaque emoji a peut-être vous pouvez les filtrer un caractère unicode correspondant (U + 1F30x, U + 1F32x, etc.) à partir d'un ensemble de "permis" personnages? –

+0

Hmm, c'est une bonne idée! – JohnWickham

Répondre

1

types de clavier peuvent être définis dans Interface Builder ou par programme en utilisant ce guide:

typedef enum { 
    UIKeyboardTypeDefault,    // Default type for the current input method. 
    UIKeyboardTypeASCIICapable,   // Displays a keyboard which can enter ASCII characters, non-ASCII keyboards remain active 
    UIKeyboardTypeNumbersAndPunctuation, // Numbers and assorted punctuation. 
    UIKeyboardTypeURL,     // A type optimized for URL entry (shows ./.com prominently). 
    UIKeyboardTypeNumberPad,    // A number pad (0-9). Suitable for PIN entry. 
    UIKeyboardTypePhonePad,    // A phone pad (1-9, *, 0, #, with letters under the numbers). 
    UIKeyboardTypeNamePhonePad,   // A type optimized for entering a person's name or phone number. 
    UIKeyboardTypeEmailAddress,   // A type optimized for multiple email address entry (shows space @ . prominently). 

    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // Deprecated 

    } UIKeyboardType; 

Le clavier Emoji est défini comme un clavier de langue séparée et ne peut donc pas être définie par programme. Il est défini par l'utilisateur dans l'application des paramètres. Je suppose, même si c'est lourd, vous pouvez soit alerter votre utilisateur ou avoir un fichier d'aide dans votre application pour dire que pour avoir la meilleure expérience avec votre application, ils devraient activer cela.

Sachez également qu'Apple rejette maintenant les applications qui créent leur propre clavier Emoji personnalisé car il fait partie du système d'exploitation principal.

+0

Merci Jeff, j'avais peur de ça ... Je vais trouver quelque chose! – JohnWickham

+0

Content de pouvoir aider et bonne chance :-) –

0

Actuellement je travaille sur un projet dans lequel l'exigence est la même que vous et en essayant de chercher la solution, mais je n'ai pas trouvé et j'ai écrit un code qui fonctionne bien pour moi. J'espère que cela fonctionne aussi pour vous. Je sais qu'il est trop tard mais vous aide à l'avenir.

Ma solution est

#pragma mark validate emoji's 

-(void)validateEmoji 
{ 
BOOL lowerCaseLetter=0,upperCaseLetter= 0,digit=0,specialCharacter=0; 
    for (int i = 0; i < [emojiTextField.text length]; i++) 
    { 
     unichar c = [emojiTextField.text characterAtIndex:i]; 
     if(!lowerCaseLetter) 
     { 
      lowerCaseLetter = [[NSCharacterSet  lowercaseLetterCharacterSet] characterIsMember:c]; 
     } 
     if(!upperCaseLetter) 
     { 
      upperCaseLetter = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:c]; 
     } 
     if(!digit) 
     { 
      digit = [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:c]; 
     } 
     if(!specialCharacter) 
     { 
      specialCharacter = [[NSCharacterSet symbolCharacterSet] characterIsMember:c]; 
     } 
    } 

    if(lowerCaseLetter || upperCaseLetter || digit || specialCharacter) 
    { 
     // if textfield contains special characters,lowercase,uppercase,numeric digits 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                 message:@"Please select only emoji's from Keyboard" 
                 delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     [email protected]""; 
     [emojiTextField becomeFirstResponder]; 
     emojiTextFieldFlag = false; 
    } 
    else 
    { 
     emojiTextFieldFlag = true; 
     // emoji is selected do whatever you want. 
    } 

} 

#pragma mark TextField delegate methods 
-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
if ([textField isEqual:emojiTextField]) 
{ 
    [emojiTextField resignFirstResponder]; 
    NSLog(@"%@",emojiTextField.text); 
    // make it blank for next click when comes back 
    appdelegate.appdelegateEmojiTextFieldClicked [email protected]""; 
    if (emojiTextFieldFlag) 
    { 
     [self saveEmojiJsonParsing]; 
    } 
    else 
    { 
     [emojiTextField becomeFirstResponder]; 
    } 
    } 
    return YES; 
    } 

-(void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    if ([textField isEqual:emojiTextField]) 
    { 
    [self validateEmoji]; 
    } 
}