您的位置:首页 > 移动开发 > IOS开发

iOS8 数字键盘添加自定义按钮(兼容各个版本以及解决自定义按钮滑动出现的问题)

2014-11-03 12:04 716 查看
插入自定义按钮前:



插入自定义按钮后:



相信大家在网上都看过了不少为自定义按钮的方法了,所以方法的具体含义这里就不详细解释了,因为我也不是很懂,这里我就直接讲实现吧。

首先第一步:

在viewdidLoad函数中添加observer,监听键盘弹出事件,代码如下:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil ];
其中keyboardWillShow:是自己是实现的,当程序监听到键盘弹出事件后执行的响应程序。UIKeyboardWillShowNotification则是Xcode的宏定义,表示键盘弹出事件。

第二步:

实现响应函数,代码如下(抄袭后修改):

- (void)keyboardWillShow:(NSNotification *)note
{
if(UI_USER_INTERFACE_IDIOM()!=UIUserInterfaceIdiomPad){
//NSArray *ws = [[UIApplication sharedApplication] windows];
if (self.rateTextField.keyboardType != UIKeyboardTypeNumberPad){
return;
}
// locate keyboard view
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView* keyboard;
CGRect appRect=[[UIScreen mainScreen] applicationFrame];

for(int i=0; i<[tempWindow.subviews count]; i++) {
keyboard = [tempWindow.subviews objectAtIndex:i];
// keyboard view found; add the custom button to it
if(([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES)||
[[keyboard description] hasPrefix:@"<UIKeyboard"] == YES||
[[keyboard description] hasPrefix:@"<UIInputSetContainerView"]==YES)
{//this line is for ios8
CGRect frame = CGRectMake(0.0f, 162.0f, 106.0f, 53.0f);
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
frame = CGRectMake(0, appRect.size.height-33, 106.0f, 53.0f);
}
self.numKeyBoardBtn = [UIButton buttonWithType:UIButtonTypeSystem];
[self.numKeyBoardBtn setTitle:@"完成" forState:UIControlStateNormal];
[self.numKeyBoardBtn setFrame:frame];
[keyboard addSubview:self.numKeyBoardBtn];

break;
}
}
}
}
其中self.rateTextField是自定义的textField,self.numKeyBoardBtn就是键盘需要加上去的按钮,这里把它作为类的成员,目的是为了等下键盘退回的时候能方便调用到它把它移出掉。而代码中3个keyboard description内容的判断就是用来适配不同版本的,具体哪个对应哪个版本可自行网上查。

至此,添加自定义按钮的代码就实现了 (对了,前提是还要自己把keyboardType设置成数字键盘),在ios8上运行,确实可以有了自定义的按钮,但是,效果非常的恶心。每次点击textField,纯数字键盘弹出的时候,都会看到按钮的“完成”字样,是从屏幕中间滑下来的,看起来非常的碍眼。而且,当把sdk的版本切换为7.1的时候,按钮直接就不出来了。查了很多方法,才开到一个说法是:什么键盘的view会在下一个event loop才会出现,所以要delay什么的,具体的看原作者的文章(文章说的事老到掉牙的ios4,我无奈之下才试了他的方法),http://blog.csdn.net/z251257144/article/details/7996197

好的,按照文章的说,修改代码,把observer的代码改成如下:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShowOnDelay) name:UIKeyboardWillShowNotification object:nil ];
这里修改了响应函数。

然后实现keyboardShowOnDelay,代码如下:

- (void) keyboardShowOnDelay
{
[self performSelector:@selector(keyboardWillShow:) withObject:nil afterDelay:0];
}


这里代码的具体含义我也不懂,只是仿造大神的方法。

做了如上的修改后,以上的两个问题都解决了。按钮不会滑动出现,ios7的按钮也可以出现了,大家可以试试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐