【问题标题】:IOS Customkeyboard. How to set special character in custom keyboardIOS 自定义键盘。如何在自定义键盘中设置特殊字符
【发布时间】:2015-11-10 00:01:56
【问题描述】:

我正在为 iphone 6 和 6Plus 开发自定义键盘。我已经开发了 shift key active-inactive 或 123 和 abc key 的逻辑。但我还想显示自定义符号,如显示的苹果键盘。请查看图片。

目前我可以将大写更改为小写,将 123 更改为 abc,但我该如何设置这个特殊字符。 注意:- 我在 github 上搜索了很多演示,但我无法在任何自定义键盘中看到特殊字符。

这是我对 大写ABC-123 按钮的逻辑。

-(void)UpparCase:(UIButton*)sender   // To make caps or small letter
{

sender.selected=!sender.selected;
if(sender.selected)
{
    if(isPortrait)
    {

    [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"upparActive.png"] forState:UIControlStateNormal];
    }
    else
    {
        [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Uppar_selctd_land.png"] forState:UIControlStateNormal];

    }

    for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
    {


        NSString *uppercaseString = [[key currentTitle] uppercaseString];

        [key setTitle:uppercaseString forState:UIControlStateNormal];

        [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];

    }
   }
   else
  {

    if(isPortrait)
    {

    [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"UpperCase.png"] forState:UIControlStateNormal];
    }
    else
    {
        [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Uppar_land.png"] forState:UIControlStateNormal];

    }
    for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
    {


        NSString *uppercaseString = [[key currentTitle] lowercaseString];

        [key setTitle:uppercaseString forState:UIControlStateNormal];

        [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];

      }

   }
}

- (IBAction)action123:(UIButton*)sender // To set 123 and ABC
 {


 sender.selected=!sender.selected;

 if(sender.selected)
 {

    [self.ObjKeyLayout.btn123Key setTitle:@"ABC" forState:UIControlStateNormal];
            int i=0;

    for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
    {

        [key setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
        NSLog(@"\n\n123isSelected\nI-%i\tArrayCharKey.Count:-%i",i,(int)self.ObjKeyLayout.ArryCharKey.count);
        if(isPortrait)
        {
             NSLog(@"\n\n123isSelected\nI-%i\tArrayCharKey.Count:-%i\nArraySpecialImageKey.Count-%i\n",i,(int)self.ObjKeyLayout.ArryCharKey.count,(int)arrspecialImageKey.count);
            [key setBackgroundImage:[UIImage imageNamed:[arrspecialImageKey objectAtIndex:i]] forState:UIControlStateNormal];




        }
        else{

            [key setBackgroundImage:[UIImage imageNamed:[arrSpecialIpad objectAtIndex:i]] forState:UIControlStateNormal];

        }

        [key setTitle:[NumKey objectAtIndex:i] forState:UIControlStateNormal];

        [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
        i++;
    }
  }
  else
     {
    [self.ObjKeyLayout.btn123Key setTitle:@"123" forState:UIControlStateNormal];
    int i=0;
    for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
    {


        [key setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];


        if(isPortrait)
        {
            [key setBackgroundImage:[UIImage imageNamed:[arrKeyImages objectAtIndex:i]] forState:UIControlStateNormal];
        }
        else
        {


            [key setBackgroundImage:[UIImage imageNamed:[keyIpad objectAtIndex:i]] forState:UIControlStateNormal];
        }
        ;

        NSString *uppercaseString = [arrAlphabet objectAtIndex:i];

        [key setTitle:uppercaseString forState:UIControlStateNormal];

        [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
        i++;
       // is123selected=NO;
      }
  }

}

【问题讨论】:

    标签: ios objective-c custom-keyboard


    【解决方案1】:

    你拿了两个数组,一个用于alphabetical,另一个用于numerical

    NSArray *NumKey;
    
    NSArray *arrAlphabet;
    

    现在在NumKey

    NumKey=[[NSArray alloc]initWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"0", @"-", @"/", @":", @";", @"(", @")", @"$", @"&", @"@", @"\"", @".", @",", @"?", @"!",@"'",@"^", nil];
    

    arrAlphabet

     arrAlphabet = [[NSArray alloc]initWithObjects:@"Q", @"W", @"E", @"R", @"T", @"Y", @"U", @"I", @"O", @"P", @"A", @"S", @"D", @"F", @"G", @"H", @"J", @"K", @"L", @"Z", @"X", @"C", @"V", @"B",@"N",@"M", nil];
    

    键盘中的IBOutlet 123ABC

    如下以编程方式添加事件。

    [self.keybard.btnNumeric addTarget:self action:@selector(action123:) forControlEvents:UIControlEventTouchUpInside];
    

    123更改为ABCABC更改为123的方法

    - (IBAction)action123:(UIButton*)sender
    {
    
        if([self.keybard.btnNumeric.titleLabel.text isEqualToString:@"123"])
        {
            [self.keybard.btnCapital setTitle:@"#+=" forState:UIControlStateNormal];
    
            [self.keybard.btnNumeric setTitle:@"ABC" forState:UIControlStateNormal];
            int i=0;
            for(UIButton *key in self.keybard.keyArray)
            {
                key.layer.cornerRadius = 6.0;
    
                [key setTitle:[NumKey objectAtIndex:i] forState:UIControlStateNormal];
    
                [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
                i++;
            }
        }
        else
        {
            [self.keybard.btnCapital setTitle:@"⬆️" forState:UIControlStateNormal];
    
            [self.keybard.btnNumeric setTitle:@"123" forState:UIControlStateNormal];
    
            int i=0;
            for(UIButton *key in self.keybard.keyArray)
            {
    
                strFirstCap = @"0";
    
                NSString *uppercaseString = [arrAlphabet objectAtIndex:i];
    
                [key setTitle:[uppercaseString lowercaseString] forState:UIControlStateNormal];
    
                [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
                i++;
            }
    
        }
    
    }
    

    输出:

    【讨论】:

    • 感谢重播,但我已经设置好了。我想知道特殊字符。就像当您单击 123 时,显示的特殊字符键代替大写按钮,当您单击它时,特殊字符(如 $、欧元或英镑等)加载和 123 设置代替特殊字符。当您单击 ABC 时,再次出现 Caps 键。请查看图片。
    • 点击特殊字符按钮会发生什么?
    • 相同的登录会产生一组符号。
    • 感谢您的回答对我有很大帮助。我仍然发布我的方法我是如何设置的。
    【解决方案2】:

    我用这种方式设置了我的问题,因为我也设置了键的图像。

      @interface KeyboardViewController ()
    {
         BOOL ABCselect;
    BOOL select123;
    BOOL keypng;
    BOOL checkactiveshift;
    }
    
      -(void)UpparCase:(UIButton*)sender
    {
    
    if (ABCselect==YES) {
        if (isPortrait) {
    
    
                         [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"key.png"] forState:UIControlStateNormal];
                        [self.ObjKeyLayout.btnCapKey setTitle:@"" forState:UIControlStateNormal];
                    }
                    else
                    {
                        [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"special_land_key.png"] forState:UIControlStateNormal];
                        [self.ObjKeyLayout.btnCapKey setTitle:@"" forState:UIControlStateNormal];
                    }
        int i=0;
        // int j=0;
    
        for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
        {
    
            [key setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
            NSLog(@"\n\n123isSelected\nI-%i\tArrayCharKey.Count:-%i",i,(int)self.ObjKeyLayout.ArryCharKey.count);
            if(isPortrait)
             {
                NSLog(@"\n\n123isSelected\nI-%i\tArrayCharKey.Count:-%i\nArraySpecialImageKey.Count-%i\n",i,(int)self.ObjKeyLayout.ArryCharKey.count,(int)arrspecialImageKey.count);
                [key setBackgroundImage:[UIImage imageNamed:[arrspecialImageKey objectAtIndex:i]] forState:UIControlStateNormal];
    
               }
            else{
    
                [key setBackgroundImage:[UIImage imageNamed:[arrSpecialIpad objectAtIndex:i]] forState:UIControlStateNormal];
    
            }
    
            [key setTitle:[NumKey objectAtIndex:i] forState:UIControlStateNormal];
    
             [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
            i++;
           }
    
         //select123=NO;
        keypng=YES;
        ABCselect=NO;
       }
    
       else if (select123==YES)
       {
    
         if(isPortrait)
         {
    
             [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Caps.png"] forState:UIControlStateNormal];
            [self.ObjKeyLayout.btnCapKey setTitle:@"" forState:UIControlStateNormal];
    
         }
         else
         {
            [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Uppar_land.png"] forState:UIControlStateNormal];
            [self.ObjKeyLayout.btnCapKey setTitle:@"" forState:UIControlStateNormal];
    
    
         }
        for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
        {
    
    
            NSString *uppercaseString = [[key currentTitle] lowercaseString];
    
            [key setTitle:uppercaseString forState:UIControlStateNormal];
    
            [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
    
        }
        select123=NO;
        keypng=NO;
        checkactiveshift=YES;
    
     }
     else if (keypng==YES)
     {
        [self.ObjKeyLayout.btnCapKey setTitle:@"123" forState:UIControlStateNormal];
                //[self.ObjKeyLayout.btnCapKey setTitle:@"" forState:UIControlStateNormal];
                [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"123.png"] forState:UIControlStateNormal];
    
        [self.ObjKeyLayout.btn123Key setTitle:@"ABC" forState:UIControlStateNormal];
    
    
                int i=0;
                for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
                {
                    [key setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
    
    
                    if(isPortrait)
                    {
                        [key setBackgroundImage:[UIImage imageNamed:[specialkey2 objectAtIndex:i]] forState:UIControlStateNormal];
                    }
                    else
                    {
    
    
                        [key setBackgroundImage:[UIImage imageNamed:[specialkey2Ipad objectAtIndex:i]] forState:UIControlStateNormal];
                    }
                    ;
                    [key setTitle:[spec2title objectAtIndex:i] forState:UIControlStateNormal];
    
                    [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
                    i++;
                    // [self action123:(UIButton*)sender];
                    // [self addGesturToKeyBoard];
    
                    //isshiftselected=NO;
                    keypng=NO;
                    ABCselect=YES;
                  //  [self action123:(UIButton*)sender];
                }
        }
    
    
        else if(!self.ObjKeyLayout.btnCapKey.isSelected){
    
    
       sender.selected=!sender.selected;
       if(sender.selected )
       {
           shiftactive=YES;
    
           if(isPortrait)
           {
    
               [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"upparActive.png"] forState:UIControlStateNormal];
           }
           else
           {
               [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Uppar_selctd_land.png"] forState:UIControlStateNormal];
    
           }
    
           for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
           {
    
    
               NSString *uppercaseString = [[key currentTitle] uppercaseString];
    
               [key setTitle:uppercaseString forState:UIControlStateNormal];
    
               [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
    
    
           }
                //   [sender1 setSelected: NO];
              // shift=YES;
           [sender setSelected: YES];
        }
    
          else
           {
    
           if(isPortrait)
            {
    
               [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Caps.png"] forState:UIControlStateNormal];
           }
           else
           {
               [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Uppar_land.png"] forState:UIControlStateNormal];
    
           }
           for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
           {
    
    
               NSString *uppercaseString = [[key currentTitle] lowercaseString];
    
               [key setTitle:uppercaseString forState:UIControlStateNormal];
    
               [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
    
            }
                 //  [sender1 setSelected: YES];
    
         }
    
         }
         else if (self.ObjKeyLayout.btnCapKey.isSelected)
        {
        if(isPortrait)
        {
    
           [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Caps.png"] forState:UIControlStateNormal];
        }
        else
        {
           [self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"Uppar_land.png"] forState:UIControlStateNormal];
    
        }
        for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
        {
    
    
           NSString *uppercaseString = [[key currentTitle] lowercaseString];
    
           [key setTitle:uppercaseString forState:UIControlStateNormal];
    
           [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
    
          }
           //  [sender1 setSelected: YES];
          self.ObjKeyLayout.btnCapKey.selected = !self.ObjKeyLayout.btnCapKey.isSelected;
    
    
           }
         }
    
       - (IBAction)action123:(UIButton*)sender
        {
    
    
      // dummy=YES;
        sender.selected=!sender.selected;
         if(sender.selected)
        {
       // is123selected=YES;
        //[self dummy];
    
        [self.ObjKeyLayout.btn123Key setTitle:@"ABC" forState:UIControlStateNormal];
         //[self.ObjKeyLayout.btnCapKey setBackgroundImage:[UIImage imageNamed:@"key.png"] forState:UIControlStateNormal];
        ABCselect=YES;
        [self UpparCase:(UIButton*)sender];
    
        int i=0;
       // int j=0;
    
        for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
        {
    
            [key setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
            NSLog(@"\n\n123isSelected\nI-%i\tArrayCharKey.Count:-%i",i,(int)self.ObjKeyLayout.ArryCharKey.count);
            if(isPortrait)
            {
                 NSLog(@"\n\n123isSelected\nI-%i\tArrayCharKey.Count:-%i\nArraySpecialImageKey.Count-%i\n",i,(int)self.ObjKeyLayout.ArryCharKey.count,(int)arrspecialImageKey.count);
                [key setBackgroundImage:[UIImage imageNamed:[arrspecialImageKey objectAtIndex:i]] forState:UIControlStateNormal];
    
    
    
    
            }
            else{
    
                [key setBackgroundImage:[UIImage imageNamed:[arrSpecialIpad objectAtIndex:i]] forState:UIControlStateNormal];
    
            }
    
            [key setTitle:[NumKey objectAtIndex:i] forState:UIControlStateNormal];
    
            [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
            i++;
        }
        makeshift=NO;
    }
    else
    {ABCselect=NO;
        [self.ObjKeyLayout.btn123Key setTitle:@"123" forState:UIControlStateNormal];
                 select123=YES;
        [self UpparCase:(UIButton*)sender];
    
    
    
        int i=0;
        for(UIButton *key in self.ObjKeyLayout.ArryCharKey)
        {
    
    
            [key setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
    
    
            if(isPortrait)
            {
                [key setBackgroundImage:[UIImage imageNamed:[arrKeyImages objectAtIndex:i]] forState:UIControlStateNormal];
            }
            else
            {
    
    
                [key setBackgroundImage:[UIImage imageNamed:[keyIpad objectAtIndex:i]] forState:UIControlStateNormal];
            }
            ;
    
            NSString *uppercaseString = [arrAlphabet objectAtIndex:i];
    
            [key setTitle:uppercaseString forState:UIControlStateNormal];
    
            [key addTarget:self action:@selector(pressKey:) forControlEvents:UIControlEventTouchUpInside];
            i++;
            //is123selected=NO;
           }
        }
         [self.ObjKeyLayout.btnCapKey setSelected: NO];
    
        }
    

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 2012-09-12
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      相关资源
      最近更新 更多