Create custom keyboard and configure it on your iPhone

39,536

Solution 1

The Emoji keyboard is build-in in iOS.

The only thing all the "Emoji" apps existing on the AppStore (like "emoji-free!") are doing, is that they activate this keyboard in the System Preferences, because it is hidden by default. These apps don't "create and install" the keyboard itself neither do they install the icons and glyphs (symbols), the smileys are already built-in in iOS too.

For example if an iPhone user receive a text message (SMS) containing some smileys, they do will see the smiley, even if they don't have installed any "Emoji-enabler" app like "Emoji-free!".


To be more precise, the emoji icons that Apple embedded in the iPhone fonts are not approved by the Unicode Standard. They are located in the "private" plane of Unicode: their codepoint is in a range that is especially reserved for private uses -- like the one Apple does by using it for these emojis -- but by definition as it is a private region, there is no dedicated name and standardized usage of these codepoint accross applications (contrary to codepoints like U+0041 which is dedicated to the glyph representing the latin letter "A")

Solution 2

Here's what I did in order to make a emoticons keyboard. First I created a custom view with two buttons and set self.textView.inputAccessoryView = self.accessoryView then had the two buttons do the following:

- (IBAction)emoticons:(id)sender 
{
    [self.textView resignFirstResponder];
    self.textView.inputView = self.emotiview.view;
    [self.textView becomeFirstResponder];
}

- (IBAction)text:(id)sender 
{
    [self.textView resignFirstResponder];
    self.textView.inputView = nil; // sets it back to it's initial form
    [self.textView becomeFirstResponder];
}

Beneath is a snippet of the code for creating all of the buttons and putting them into a view, which is in a scrollview.

for( int i = 0; i < self.emoticonsCharacters.count; i++ )
    {
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake((i % 5)*50, 10 + 50*(i / 5), 45, 45);
        [button setTitle: [self.emoticonsCharacters objectAtIndex:i] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(enterEmoticon:) forControlEvents:UIControlEventTouchDown];
        [self.emoticonsView1 addSubview:button];
    }

This is an array of all of the emoticons Characters.

-(NSArray*) emoticonsCharacters
{
    if(!emoticonsCharacters)
    { 
        // unicode taken from http://www.easyapns.com/iphone-emoji-alerts
        emoticonsCharacters = [[NSArray alloc] initWithObjects:@"\ue415",@"\ue056",@"\ue057", @"\ue414",@"\ue405",  @"\ue418", @"\ue417", @"\ue40d", @"\ue40a", @"\ue404", @"\ue105", @"\ue409", @"\ue40e", @"\ue402", @"\ue108", @"\ue403", @"\ue058", @"\ue407", @"\ue401", @"\ue40f", @"\ue40b", @"\ue406", @"\ue413", @"\ue411", @"\ue412", @"\ue410", @"\ue107", @"\ue059", @"\ue416", @"\ue408", @"\ue40c", @"\ue11a", @"\ue10c", @"\ue32c", @"\ue32a", @"\ue32d", @"\ue328", @"\ue32b", @"\ue022", @"\ue023", @"\ue327", @"\ue329", @"\ue32e", @"\ue32f", @"\ue335", @"\ue334", @"\ue021", @"\ue337", @"\ue020", @"\ue336", @"\ue13c", @"\ue330", @"\ue331", @"\ue326", @"\ue03e", @"\ue11d", @"\ue05a", @"\ue00e", @"\ue421", @"\ue420", @"\ue00d", @"\ue010", @"\ue011", @"\ue41e", @"\ue012", @"\ue422", @"\ue22e", @"\ue22f", @"\ue231", @"\ue230", @"\ue427", @"\ue41d", @"\ue00f", @"\ue41f", @"\ue14c", @"\ue201", @"\ue115", @"\ue428", @"\ue51f", @"\ue429", @"\ue424", @"\ue423", @"\ue253", @"\ue426", @"\ue111", @"\ue425", @"\ue31e", @"\ue31f", @"\ue31d", @"\ue001", @"\ue002", @"\ue005", @"\ue004", @"\ue51a", @"\ue519", @"\ue518", @"\ue515", @"\ue516", @"\ue517", @"\ue51b", @"\ue152", @"\ue04e", @"\ue51c", @"\ue51e", @"\ue11c", @"\ue536", @"\ue003", @"\ue41c", @"\ue41b", @"\ue419", @"\ue41a", @"\ue04a", @"\ue04b", @"\ue049", @"\ue048", @"\ue04c", @"\ue13d", @"\ue443", @"\ue43e", @"\ue04f", @"\ue052", @"\ue053", @"\ue524", @"\ue52c", @"\ue52a", @"\ue531", @"\ue050", @"\ue527", @"\ue051", @"\ue10b", @"\ue52b", @"\ue52f", @"\ue528", @"\ue01a", @"\ue134", @"\ue530", @"\ue529", @"\ue526", @"\ue52d", @"\ue521", @"\ue523", @"\ue52e", @"\ue055", @"\ue525", @"\ue10a", @"\ue109", @"\ue522", @"\ue019", @"\ue054", @"\ue520", @"\ue306", @"\ue030", @"\ue304", @"\ue110", @"\ue032", @"\ue305", @"\ue303", @"\ue118", @"\ue447", @"\ue119", @"\ue307", @"\ue308", @"\ue444", @"\ue441", @"\ue436", @"\ue437", @"\ue438", @"\ue43a", @"\ue439", @"\ue43b", @"\ue117", @"\ue440", @"\ue442", @"\ue446", @"\ue445", @"\ue11b", @"\ue448", @"\ue033", @"\ue112", @"\ue325", @"\ue312", @"\ue310", @"\ue126", @"\ue127", @"\ue008", @"\ue03d", @"\ue00c", @"\ue12a", @"\ue00a", @"\ue00b", @"\ue009", @"\ue316", @"\ue129", @"\ue141", @"\ue142", @"\ue317", @"\ue128", @"\ue14b", @"\ue211", @"\ue114", @"\ue145", @"\ue144", @"\ue03f", @"\ue313", @"\ue116", @"\ue10f", @"\ue104", @"\ue103", @"\ue101", @"\ue102", @"\ue13f", @"\ue140", @"\ue11f", @"\ue12f", @"\ue031", @"\ue30e", @"\ue311", @"\ue113", @"\ue30f", @"\ue13b", @"\ue42b", @"\ue42a", @"\ue018", @"\ue016", @"\ue015", @"\ue014", @"\ue42c", @"\ue42d", @"\ue017", @"\ue013", @"\ue20e", @"\ue20c", @"\ue20f", @"\ue20d", @"\ue131", @"\ue12b", @"\ue130", @"\ue12d", @"\ue324", @"\ue301", @"\ue148", @"\ue502", @"\ue03c", @"\ue30a", @"\ue042", @"\ue040", @"\ue041", @"\ue12c", @"\ue007", @"\ue31a", @"\ue13e", @"\ue31b", @"\ue006", @"\ue302", @"\ue319", @"\ue321", @"\ue322", @"\ue314", @"\ue503", @"\ue10e", @"\ue318", @"\ue43c", @"\ue11e", @"\ue323", @"\ue31c", @"\ue034", @"\ue035", @"\ue045", @"\ue338", @"\ue047", @"\ue30c", @"\ue044", @"\ue30b", @"\ue043", @"\ue120", @"\ue33b", @"\ue33f", @"\ue341", @"\ue34c", @"\ue344", @"\ue342", @"\ue33d", @"\ue33e", @"\ue340", @"\ue34d", @"\ue339", @"\ue147", @"\ue343", @"\ue33c", @"\ue33a", @"\ue43f", @"\ue34b", @"\ue046", @"\ue345", @"\ue346", @"\ue348", @"\ue347", @"\ue34a", @"\ue349", @"\ue036", @"\ue157", @"\ue038", @"\ue153", @"\ue155", @"\ue14d", @"\ue156", @"\ue501", @"\ue158", @"\ue43d", @"\ue037", @"\ue504", @"\ue44a", @"\ue146", @"\ue50a", @"\ue505", @"\ue506", @"\ue122", @"\ue508", @"\ue509", @"\ue03b", @"\ue04d", @"\ue449", @"\ue44b", @"\ue51d", @"\ue44c", @"\ue124", @"\ue121", @"\ue433", @"\ue202", @"\ue135", @"\ue01c", @"\ue01d", @"\ue10d", @"\ue136", @"\ue42e", @"\ue01b", @"\ue15a", @"\ue159", @"\ue432", @"\ue430", @"\ue431", @"\ue42f", @"\ue01e", @"\ue039", @"\ue435", @"\ue01f", @"\ue125", @"\ue03a", @"\ue14e", @"\ue252", @"\ue137", @"\ue209", @"\ue154", @"\ue133", @"\ue150", @"\ue320", @"\ue123", @"\ue132", @"\ue143", @"\ue50b", @"\ue514", @"\ue513", @"\ue50c", @"\ue50d", @"\ue511", @"\ue50f", @"\ue512", @"\ue510", @"\ue50e", @"\ue21c", @"\ue21d", @"\ue21e", @"\ue21f", @"\ue220", @"\ue221", @"\ue222", @"\ue223", @"\ue224", @"\ue225", @"\ue210", @"\ue232", @"\ue233", @"\ue235", @"\ue234", @"\ue236", @"\ue237", @"\ue238", @"\ue239", @"\ue23b", @"\ue23a", @"\ue23d", @"\ue23c", @"\ue24d", @"\ue212", @"\ue24c", @"\ue213", @"\ue214", @"\ue507", @"\ue203", @"\ue20b", @"\ue22a", @"\ue22b", @"\ue226", @"\ue227", @"\ue22c", @"\ue22d", @"\ue215", @"\ue216", @"\ue217", @"\ue218", @"\ue228", @"\ue151", @"\ue138", @"\ue139", @"\ue13a", @"\ue208", @"\ue14f", @"\ue20a", @"\ue434", @"\ue309", @"\ue315", @"\ue30d", @"\ue207", @"\ue229", @"\ue206", @"\ue205", @"\ue204", @"\ue12e", @"\ue250", @"\ue251", @"\ue14a", @"\ue149", @"\ue23f", @"\ue240", @"\ue241", @"\ue242", @"\ue243", @"\ue244", @"\ue245", @"\ue246", @"\ue247", @"\ue248", @"\ue249", @"\ue24a", @"\ue24b", @"\ue23e", @"\ue532", @"\ue533", @"\ue534", @"\ue535", @"\ue21a", @"\ue219", @"\ue21b", @"\ue02f", @"\ue024", @"\ue025", @"\ue026", @"\ue027", @"\ue028", @"\ue029", @"\ue02a", @"\ue02b", @"\ue02c", @"\ue02d", @"\ue02e",@"\ue332",@"\ue333",@"\ue24e", @"\ue24f",@"\ue537", nil];

    }
    return emoticonsCharacters;
}
Share:
39,536
vikas ojha
Author by

vikas ojha

Updated on May 28, 2020

Comments

  • vikas ojha
    vikas ojha almost 4 years

    I am working on creating custom keyboardas presented by EMOJI with having characters and pictorial icons like smileys and other day to day used symbols.So far i came to know that these symbols have unicode standards that are added to Unicode Consortium and approved by Apple.

    http://itunes.apple.com/us/app/emoji-free!/id332509635?mt=8

    I need help regarding the process these symbols are registered. Is it possible to make the keyboard compatible for text inputting in all the apps installed on iphone if so How to proceed ?.

    NOTE:Are these keyboards approved by apple or apps with them gets rejected.. ...Any idea

    Any help would be appreciated .

    Thanks Vikas Ojha

  • vikas ojha
    vikas ojha over 12 years
    Hi Narayanan Ramamoorthy, the example u provided is of gr8 help but how can i configure it to keyboard types or to other apps,Also will the text(images/symbol) written on one iphone be readable on other exactly in the same form
  • vikas ojha
    vikas ojha over 12 years
    Ok if this is limited to my textview/textfields only in my app only then the text including emoticon .So will this text be visible on the other iPhone the same way its displayed on while Sending from my device...?
  • AliSoftware
    AliSoftware over 12 years
    Yes, because every iOS device (iPhone, iPad, iPod) include the fonts that have the needed characters in their Unicode table to display emojis. So any iPhone can display these Unicode codepoints as emojis as they all include the corresponding glyph. For any other device, as they don't have those emoji glyphs for these Unicode codepoints (but maybe nothing, maybe some private glyphs for a different usage) they won't be able to display it
  • AliSoftware
    AliSoftware over 12 years
    Actually, even if it is more special glyphs in the Unicode table of every font embed in iOS, the effect is quite the same as if you had a specific font (think of fonts like Webdings, Wingdings or Dingbats): as long as the receiver has the font, it will be able to display the same glyphs and these will be rendered the same. But if it does not have the font, this will be rendered differently or at least not as expected. This is quite the same idea with the Unicode private codepoint range.
  • Narayanan Ramamoorthy
    Narayanan Ramamoorthy over 12 years
    i have just send link to follow .please try it with that first
  • vikas ojha
    vikas ojha over 12 years
    Hi Narayanan,I didnt get any Link in you post can u plz check
  • AliSoftware
    AliSoftware almost 12 years
    Some addition : since my answer, Unicode version 6.0 has been released, the codepoints for emoji glyphs has been standardized in a dedicated plane, and Apple has adopted this standard in iOS5. So even if in iOS4 the emoji characters were in a "private" plane of Unicode, iOS5 uses now the official codepoints (which are not in a private plane) for emoji glyphs. (previous codepoints from the private plane still display emoji glyphs, for the sake of compatibility, but the new codepoints are used when you insert an emoji character)
  • Zeus Alexander
    Zeus Alexander over 11 years
    Why is the keyboard hidden by default? and are there other keyboards hidden by default too?
  • AliSoftware
    AliSoftware over 11 years
    Because it used private Unicode codepoints back in iOS4, so was only compatible with other iPhones (sending an message containing an emoji with these private codepoints to another kind of phone or to a desktop computer would result in an unknown character being displayed instead). But since then, the Unicode 6.0 standard has been released and include an emoji plane with dedicated codepoints for emoji glyphs, and iOS5 and iOS6 now use these, which are compatible with other devices that respect the Unicode 6.0 standard, so the keyboard use official codepoints and is no longer hidden.
  • Zeus Alexander
    Zeus Alexander over 11 years
    Thanks for your response. I want create an application which will activate Pashto language keyboard, which is not in the Settings>International keyboards list, but I suspect it might be hidden like the Emoji keyboard which was hidden in previous iOS versions. The Pashto language keyboard is available in OS X so it might be available in iOS too. How can I find out if it is there in iOS?
  • AliSoftware
    AliSoftware over 11 years
    I actually don't have a clue. Maybe using a jailbroken iPhone one can inspect the files embedded in iOS itself and do some investigation about that (but that's not my area of expertise)
  • thesowismine
    thesowismine over 6 years
    I'm confused, is this just with a jailbroken iphone or does apple actually allow you to do these types of customizations??? If so what else can i do???