IOS自定义键盘。如何在自定义键盘中设置特殊字符。

5
我正在开发适用于iPhone 6和6 Plus的自定义键盘。我已经开发了使Shift键处于活动或非活动状态以及123和ABC键的逻辑。但是我还想显示自定义符号,就像苹果键盘所示。请查看图片。

enter image description here

目前我可以将大写字母改为小写字母,将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;
      }
  }

}
2个回答

2
你需要用两个数组,分别存储字母和数字。
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];

在键盘中使用 123ABC 的 IBOutlet。

以下是以编程方式添加事件的代码:

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

123转换为ABC或将ABC转换为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时,大写锁定键再次出现。请查看图像。 - Badal Shah
点击特殊字符按钮时会发生什么? - Badal Shah
将相同的登录信息组成一个符号数组。 - Kirit Modi
感谢您的回答,对我帮助很大。我仍然会发布我的方法,说明我是如何设置这个的。 - Badal Shah

1
我这样设置问题是因为我也设置了按键的图像。
  @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];

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接