在 iPhone/iPad 中随意修改数字键盘按钮
2010-09-27 01:33:00 来源:WEB开发网一、起因
iPhone 的键盘,特别是数字键盘,往往不能满足程序的输入需要。最典型的例子就是在数字键盘上添加一个“.”,用来输入小数点。安装 iPhone SDK 官方的观点,如果要使用小数点键盘,那只好使用数字和符号键盘,但那样没个按键很小,且不需要的按键太多。
二、现有方案
针对这种情况,最早的解决方案,请参考这里:http://www.cnblogs.com/mac_arthur/archive/2010/05/18/1738363.html。使用的是 以下代码来检测一个 Notification。
引用
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(addCustomKeyBoardButton)
name:UIKeyboardWillShowNotification
object:nil];
这种方法,在 iOS 4.0 后失效了,原因有两个,一是UIKeyboardWillShowNotification的时候,键盘根本没有创建出来;另外,Class Name 也被外包了一层,叫做UIPeripheralHostView。
于是又有了一种改进的方案,请看这里:http://www.neoos.ch/news/46-development/54-uikeyboardtypenumberpad-and-the-missing-return-key。主要的改进是在UIKeyboardDidShowNotification的通知消息中来修改键盘。但正如作者所说,这里有个不完美的情况,只能等键盘动画显示完成之后,才能添加显示我们的东西,视觉效果不好。
三、改进方案
经过试验,找到一个比较完美的方案:在 UITextField 的becomeFirstResponder和resignFirstResponder中修改键盘。
定以一个类,假如叫做 KBCustomTextField : UITextField,在这个类中加入一下代码:
引用
//
- (BOOL)becomeFirstResponder
{
BOOL ret = [super becomeFirstResponder];
[self modifyKeyView:@"NumberPad-Empty" display:@"." represent:@"." interaction:@"String"];
return ret;
}
//
- (BOOL)resignFirstResponder
{
BOOL ret = [super resignFirstResponder];
[self modifyKeyView:@"NumberPad-Empty" display:nil represent:nil interaction:@"None"];
return ret;
}
modifyKeyView 的实现可以参看附件。我使用的是循环查找UIKBKeyView类,这是Apple 的 Private
- ››iphone图片拉伸的几种方法
- ››iphone正则表达式的简单使用
- ››iPhone开发Unresolved Symbols CAKeyframeAnimati...
- ››IPhone开发-“此证书是由未知颁发机构签名”解决方...
- ››IPhone开发-整合私钥和证书,生成.p12文件
- ››iPhone应用开发-UIPickerView选取器详解
- ››iphone 获取屏幕的宽度和高度
- ››iPhone读取工程包中的二进制文件
- ››iPhone新手机 不挂YouTube APP
- ››iPhone 获取指定格式的时间和日期
- ››IPad使用UIModalPresentationFormSheet时隐藏键盘...
- ››iPhone版PPS走进生活 观赏体验媲美PC版
赞助商链接