博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义键盘
阅读量:4110 次
发布时间:2019-05-25

本文共 1693 字,大约阅读时间需要 5 分钟。

有一种思路叫寄生...


我相信是懒人推动了世界的发展,既然iphone有了自己的软件盘,我们什么还要自己实现其功能呢。
so,只要寄生在上面就行了。

感谢alan转载的文章给的灵感。


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

主要代码:
添加自身类为键盘事件的观察者
  1. [[NSNotificationCenter defaultCenter] addObserver:self
  2.                                              selector:@selector(keyboardWillShow:)
  3.                                                  name:UIKeyboardWillShowNotification
  4.                                                object:nil];


核心思路代码:

  1. - (void)keyboardWillShow:(NSNotification *)note
  2. {  
  3.     UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];//知识点
  4.     for(int i=0; i<[tempWindow.subviews count]; i++)
  5.     {
  6.         keyboard = [tempWindow.subviews objectAtIndex:i];
  7.         if([[keyboard description] hasPrefix:@"
  8.         {
  9.             [keyboard setFrame:CGRectMake(0, 460, 320, 345)];
  10.             [self congfigKeypad];
  11.             
  12.             [keyboard addSubview:keyPadView1];
  13.             
  14.         }
  15.     }
  16. }


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

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


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

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


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

思路:

  1. if ([s_text length] > 0)
  2.     {
  3.         NSRange rang;
  4.         rang.location = [s_text length] - 1;
  5.         rang.length = 1;
  6.         [s_text deleteCharactersInRange:rang];
  7.     }


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


继续优化

用textfield的代理方法控制键盘的字串类型,长度,和响应消失
[ 此帖被evangel在2009-12-17 22:32重新编辑 ]
图片:图片 1.png

图片:图片 2.png

你可能感兴趣的文章
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(二)
查看>>
pytorch(三)
查看>>
pytorch(四)
查看>>
pytorch(5)
查看>>
pytorch(6)
查看>>
opencv 指定版本下载
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>