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的代理方法控制键盘的字串类型,长度,和响应消失

  • 相关阅读:
    【3.1】学习C++之再逢const
    【8】学习C++之this指针
    【7】学习C++之类的构造函数
    【6】学习C++之类的实例化及访问
    【5】学习C++之类的概念
    【4】学习C++之内存管理
    【3】学习C++之const关键字的使用
    【2】学习C++之引用
    【C#第一天】数据相关
    【1】学习C++时,一些零散知识点01
  • 原文地址:https://www.cnblogs.com/max5945/p/2599724.html
Copyright © 2011-2022 走看看