2012-12-22 108 views
2

我有一個文本字段只應該包含的表情符號的字符。是否可以將用戶的鍵盤限制爲僅表情符輸入,即禁用其他鍵盤?限制鍵盤繪文字

+1

每一個表情符號都有相應的Unicode字符(U + 1F30x,U + 1F32x等),也許你可以從一組的 「允許」 字符過濾它們? –

+0

嗯,這是一個好主意! – JohnWickham

回答

1

鍵盤類型可以在界面生成器使用本指南設置或編程:

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; 

表情符號鍵盤被設置爲單獨的語言的鍵盤,並且因此不能被編程設置。它由用戶在設置應用程序中設置。

我想,即使它很麻煩,你既可以提醒用戶或有您的應用程序內的幫助文件說,有一個與你的應用程序的最佳體驗,他們將需要啓用。

另外要注意,我相信蘋果現在會拒絕創建自定義的表情符號鍵盤,因爲它是主要的OS的一部分,現在的應用程序。

+0

謝謝傑夫,我害怕那個......我會想出一些東西! – JohnWickham

+0

很高興我能幫忙,祝你好運:-) –

0

目前我工作的一個項目中,要求是一樣的,你並試圖尋找解決方案,但沒有找到,我寫了代碼工作對我罰款。希望它也適用於你。我知道它太晚了,但將來會有所幫助。

我的解決辦法是

#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]; 
    } 
}