WEB开发网
开发学院手机开发iPhone 开发 在 iPhone/iPad 中随意修改数字键盘按钮 阅读

在 iPhone/iPad 中随意修改数字键盘按钮

 2010-09-27 01:33:00 来源:WEB开发网   
核心提示:一、起因iPhone 的键盘,特别是数字键盘,在 iPhone/iPad 中随意修改数字键盘按钮,往往不能满足程序的输入需要,最典型的例子就是在数字键盘上添加一个“.”,假如叫做 KBCustomTextField : UITextField,在这个类中加入一下代码:引用//- (BOOL)becomeFirstRes

一、起因

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

1 2 3 4 5 6  下一页

Tags:iPhone iPad 随意

编辑录入:coldstar [复制链接] [打 印]
赞助商链接