通过 UIKeyboardWillShowNotification 捕获软键盘事件 一个搜索效果的实现
2012-09-10 18:15
381 查看
iPhone内置的Safari程序,点URL条,键盘和URL条中间部分变灰显示,然后随着URL的输入,在中间以UITableView显示搜索的结果。好多iPhone程序也都有类似的效果。这是如何实现的呢?下面说一下我的实现方法。
首先注册键盘事件UIKeyboardWillShowNotification的监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
程序在点击textField或searchBar,键盘显示之前,会发送UIKeyboardWillShowNotification通知消息到我们注册的对象。在keyboardWillShow方法里,我们可以在要变灰的位置上加一个背景着色为黑色的UIView,并将其alpha属性设为0.9,以达到效果
- (void)keyboardWillShow:(NSNotification*)aNotification {
if (keyboardShown)
return;
NSDictionary* info = [aNotification userInfo];
NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
//键盘的大小
CGSize keyboardRect = [aValue CGRectValue].size;
//计算覆盖上去的UIView的区域,因为键盘始终是在上面的,所以UIView *maskView下面可以大些,主要不要盖住上面的searchBar之类的内容。要显示结果的UITableView的大小则要根据键盘的大小算出确切的中间区域
...
//将maskView移动最前面
[window bringSubviewToFront:maskView];
maskView.alpha = 0.0;
//设置动画和maskView最终的alpha值
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
maskView.alpha = 0.9;
[UIView commitAnimations];
keyboardShown = YES;
}
keyboardShown是用来跟踪键盘是否已经显示的布尔变量。如果有多个文本域,之间切换时虽然键盘不变,仍会生成UIKeyboardWillShowNotification。通过变量keyboardShown跟踪键盘是不是真的隐藏,可以保证这个效果只执行一次。
当searchBar有输入时,可参考官方例子TableSearch,把UITableView加到上面的maskView上。
当键盘隐藏时,把UITableView移掉,将maskView的alpha属性设为0,即可隐藏maskView。
实现方法可以更灵活,大体思路应该就是这样吧。
转自:http://hi.baidu.com/programme/blog/item/6f8e4c08359015920b7b8249.html
首先注册键盘事件UIKeyboardWillShowNotification的监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
程序在点击textField或searchBar,键盘显示之前,会发送UIKeyboardWillShowNotification通知消息到我们注册的对象。在keyboardWillShow方法里,我们可以在要变灰的位置上加一个背景着色为黑色的UIView,并将其alpha属性设为0.9,以达到效果
- (void)keyboardWillShow:(NSNotification*)aNotification {
if (keyboardShown)
return;
NSDictionary* info = [aNotification userInfo];
NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
//键盘的大小
CGSize keyboardRect = [aValue CGRectValue].size;
//计算覆盖上去的UIView的区域,因为键盘始终是在上面的,所以UIView *maskView下面可以大些,主要不要盖住上面的searchBar之类的内容。要显示结果的UITableView的大小则要根据键盘的大小算出确切的中间区域
...
//将maskView移动最前面
[window bringSubviewToFront:maskView];
maskView.alpha = 0.0;
//设置动画和maskView最终的alpha值
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
maskView.alpha = 0.9;
[UIView commitAnimations];
keyboardShown = YES;
}
keyboardShown是用来跟踪键盘是否已经显示的布尔变量。如果有多个文本域,之间切换时虽然键盘不变,仍会生成UIKeyboardWillShowNotification。通过变量keyboardShown跟踪键盘是不是真的隐藏,可以保证这个效果只执行一次。
当searchBar有输入时,可参考官方例子TableSearch,把UITableView加到上面的maskView上。
当键盘隐藏时,把UITableView移掉,将maskView的alpha属性设为0,即可隐藏maskView。
实现方法可以更灵活,大体思路应该就是这样吧。
转自:http://hi.baidu.com/programme/blog/item/6f8e4c08359015920b7b8249.html
相关文章推荐
- 通过 UIKeyboardWillShowNotification 捕获软键盘事件 一个搜索效果的实现
- 点击表格的单元格时实现变颜色,通过for循环为每个单元格添加一个onclick事件
- iOS8 UIKeyboardWillShowNotification 键盘遮挡问题
- RecyclerView的基本用法 (一个控件实现ListView, GridView等效果)+接口回调点击事件
- Android 通过消息栏实现应用程序前后台切换效果Notification
- UIKeyboardWillShowNotification 监听键盘高度变化
- 通过DIV+CSS实现 一块没有连接的区域实现鼠标事件的动态效果
- UIKeyboardWillShowNotification
- 捕捉enter事件实现搜索功能时遇到的一个怪异问题
- UIKeyboardWillShowNotification & UIKeyboardDidShowNotification report wrong keyboard height
- Vue.js中实现通过一个dom的事件,使得另一dom也触发事件
- Android项目类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现
- 通过DIV+CSS实现 一块没有连接的区域实现鼠标事件的动态效果
- UIKeyboardWillShowNotification 真机中,在键盘为中文键盘时,会调用多次
- Android通过Path实现复杂效果(搜索按钮+时钟的实现 )
- Android 类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现
- ALV通过F4事件,实现自定义搜索帮助F4
- iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知
- UIKeyboardWillShowNotification 监听键盘高度变化
- JavaScript中通过鼠标事件实现模拟拖放效果