zoukankan      html  css  js  c++  java
  • 完美实现自定义软键盘(Deprecated)

    感谢alan转载的文章给的灵感。
    http://www.cocoachina.com/bbs/read.php?tid-3999.html

    思路:
    1.用静态方法找到应用程序当前view(window)中的UIKeyboard的view
    2.在键盘的view上帖上自己的view,(精彩了,这个自己的view就是你自己键盘,任意发挥,什么类型键盘都可以做了)
    3.根据需要调整系统键盘的大小以满足你想要的尺寸
    4.给自己的键盘view上的button添加方法,实现功能

    主要代码:
    添加自身类为键盘事件的观察者

     
    复制代码
    1. [[NSNotificationCenter defaultCenter] addObserver:self 
                                                   selector:@selector(keyboardWillShow:) 
                                                       name:UIKeyboardWillShowNotification 
                                                     object:nil];



    核心思路代码:

     
    复制代码

    1. - (void)keyboardWillShow:(NSNotification *)note 
      {  
          UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];//知识点
          for(int i=0; i<[tempWindow.subviews count]; i++) 
          {
              keyboard = [tempWindow.subviews objectAtIndex:i];
              if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
              {
                  [keyboard setFrame:CGRectMake(0, 460, 320, 345)];
                  [self congfigKeypad];
                  
                  [keyboard addSubview:keyPadView1];
                  
              }
          }
      }



    比如配置方法可以是这样:

     
    复制代码
    1. -(void)congfigKeypad
      {
         SearBtn *one = [[SearBtn alloc] initWithFrame:CGRectMake(81, 3, kNumPadW, kNumPadH) index:1 ContextString:@"1" type:kNumPadType];
          [one setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
          [one addTarget:self action:@selector(buttonClickAtIndex:) forControlEvents:UIControlEventTouchUpInside];
              //......略
      }



    添加NSMutalbeString作为文本域字串的容器,点击button后append的button对应的字串。

     
    复制代码

    1. - (void)buttonClickAtIndex:(id)sender
      {
          SearBtn *btnItem = (SearBtn*)sender;
          NSString *str = btnItem->btnText;
          [s_text appendString:str];
          [sBar setText:s_text];
      }

    ;

    再实现一个deleteChar的方法作为退格键
    思路:

     
    复制代码

    1. if ([s_text length] > 0)
          {
              NSRange rang;
              rang.location = [s_text length] - 1;
              rang.length = 1;
              [s_text deleteCharactersInRange:rang];
          }



    现在点击各种文本域,应该就可以现实自己的键盘了。

    继续优化
    用textfield的代理方法控制键盘的字串类型,长度,和响应消失

  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/max5945/p/2599724.html
Copyright © 2011-2022 走看看