感谢alan转载的文章给的灵感。
http://www.cocoachina.com/bbs/read.php?tid-3999.html
思路:
1.用静态方法找到应用程序当前view(window)中的UIKeyboard的view
2.在键盘的view上帖上自己的view,(精彩了,这个自己的view就是你自己键盘,任意发挥,什么类型键盘都可以做了)
3.根据需要调整系统键盘的大小以满足你想要的尺寸
4.给自己的键盘view上的button添加方法,实现功能
主要代码:
添加自身类为键盘事件的观察者
复制代码
- [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
|
核心思路代码:
复制代码
- (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]; } } }
|
比如配置方法可以是这样:
复制代码
- -(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对应的字串。
复制代码
- (void)buttonClickAtIndex:(id)sender { SearBtn *btnItem = (SearBtn*)sender; NSString *str = btnItem->btnText; [s_text appendString:str]; [sBar setText:s_text]; }
|
;
再实现一个deleteChar的方法作为退格键
思路:
复制代码
if ([s_text length] > 0) { NSRange rang; rang.location = [s_text length] - 1; rang.length = 1; [s_text deleteCharactersInRange:rang]; }
|
现在点击各种文本域,应该就可以现实自己的键盘了。
继续优化
用textfield的代理方法控制键盘的字串类型,长度,和响应消失