iOS开发之UIKeyboardTypeNumberPad数字键盘自定义按键

 更新时间:2016年08月24日 14:12:05   作者:Mr.pengge  
这篇文章主要介绍了iOS开发之UIKeyboardTypeNumberPad数字键盘自定义按键 的相关资料,需要的朋友可以参考下

最近做一个搜索用户的功能,这里使用了UISearchBar。由于搜索的方式只有手机号码,所以这里的键盘要限制为数字输入,可以这么做:

self.searchBar.keyboardType = UIKeyboardTypeNumberPad;如果使用的不是搜索框而是textField输入框,可以设置textField的键盘属性来展示 self.textField.keyboardType = UIKeyboardTypeNumberPad;监听事件如下所示即可。

但是这里有个问题,就是数字键盘上面没有“搜索”按钮,这样子用户在输入完手机号码后无法搜索。所以这个时候我们需要自己添加一个自定义的搜索按钮,然后加到键盘上面。

解决思路如下所示:

1.自定义搜索button

2.监听键盘出现的事件

3.遍历搜索的Windows窗体,找到键盘的窗体,然后遍历其子视图,找到我们真正需要的键盘视图

4.把我们自定义的按钮加到上面找到的视图里

这里要注意的一点,随着iOS SDK的不断发展,keyboard的视图名称也不断在更新变化,当你调试以下代码无法得到期待的效果时,请重新遍历一次窗台,然后慢慢调试,找到真正需要的视图名称。

解决代码

1.自定义搜索按钮

// 搜索按钮
_searchButton = [UIButton buttonWithType:UIButtonTypeCustom];
_searchButton.frame = CGRectMake(0, 163, 106, 53);
[_searchButton setTitle:@"搜索" forState:UIControlStateNormal];
[_searchButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_searchButton addTarget:self action:@selector(SearchButtonDidTouch:) forControlEvents:UIControlEventTouchUpInside]; 

2.监听键盘出现的事件

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowOnDelay:) name:UIKeyboardWillShowNotification object:nil];
- (void)keyboardWillShowOnDelay:(NSNotification *)notification {
[self performSelector:@selector(keyboardWillShow:) withObject:nil afterDelay:0];
}

这里面监听通知后的执行函数并非立马执行查找窗体的函数,是因为在iOS4后,键盘添加到窗体的事件放到了下一个EventLoop,所以我们采用了延迟的方法。

3. 遍历视图,并添加按钮

- (void)keyboardWillShow:(NSNotification *)notification {
UIView *foundKeyboard = nil;
UIWindow *keyboardWindow = nil;
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
if (![[testWindow class] isEqual:[UIWindow class]]) {
keyboardWindow = testWindow;
break;
}
}
if (!keyboardWindow) return;
for (__strong UIView *possibleKeyboard in [keyboardWindow subviews]) {
if ([[possibleKeyboard description] hasPrefix:@"<UIInputSetContainerView"]) {
for (__strong UIView *possibleKeyboard_2 in possibleKeyboard.subviews) {
if ([possibleKeyboard_2.description hasPrefix:@"<UIInputSetHostView"]) {
foundKeyboard = possibleKeyboard_2;
}
}
}
}
if (foundKeyboard) {
if ([[foundKeyboard subviews] indexOfObject:_searchButton] == NSNotFound) {
[foundKeyboard addSubview:_searchButton];
} else {
[foundKeyboard bringSubviewToFront:_searchButton];
}
}
}

以上所述是小编给大家介绍的iOS开发之UIKeyboardTypeNumberPad数字键盘自定义按键,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • iOS开发retina屏幕下的点与像素关系详解

    iOS开发retina屏幕下的点与像素关系详解

    这篇文章主要为大家介绍了iOS开发retina屏幕下的点与像素关系详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • iOS获取cell中webview的内容尺寸

    iOS获取cell中webview的内容尺寸

    这篇文章主要介绍了iOS获取cell中webview内容尺寸,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • iOS应用开发中监听键盘事件的代码实例小结

    iOS应用开发中监听键盘事件的代码实例小结

    这篇文章主要介绍了iOS应用开发中监听键盘事件的代码实例小结,呼出键盘等操作为iOS App中的必备功能,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-03-03
  • iOS APP 多服务器环境分离的方法

    iOS APP 多服务器环境分离的方法

    这篇文章主要介绍了iOS APP 多服务器环境分离的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • iOS使用pageViewController实现多视图滑动切换

    iOS使用pageViewController实现多视图滑动切换

    这篇文章主要为大家详细介绍了iOS使用pageViewController实现多视图滑动切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 解决SDK注入权限验证安卓正常,IOS出现config fail的方法

    解决SDK注入权限验证安卓正常,IOS出现config fail的方法

    这篇文章主要介绍了解决SDK注入权限验证安卓正常,IOS出现config fail的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 关于iOS 11不能定位问题的解决方法

    关于iOS 11不能定位问题的解决方法

    最近在开发中遇到一个问题,后来发现是苹果新增一个权限,自己可查,下面这篇文章主要给大家介绍了关于iOS 11不能定位问题的解决方法,文中介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起来一起学习学习吧。
    2017-11-11
  • IOS中各种手势操作实例代码

    IOS中各种手势操作实例代码

    IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种,具体哪几种大家通过本文学习吧,本文重点给大家介绍IOS中各种手势操作实例代码,一起看看吧
    2017-03-03
  • iOS runtime动态添加方法示例详解

    iOS runtime动态添加方法示例详解

    Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西。下面这篇文章主要给大家介绍了关于iOS runtime动态添加方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-01-01
  • iOS自定义推送消息提示框

    iOS自定义推送消息提示框

    这篇文章主要为大家详细介绍了自定义iOS推送消息提示框的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论