iOS全局处理键盘事件
2024-10-18 08:55:17
转自:http://www.cnblogs.com/xinus/archive/2013/01/22/ios-keybord-notification.html
- 注册监听键盘事件的通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardShow:)
name:UIKeyboardDidShowNotification
object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardHide:)
name:UIKeyboardDidHideNotification
object:nil]; - 在键盘将要出现和隐藏的回调中,加入动画。
- (void)keyboardWillShow:(NSNotification *)notif {
if (self.hidden == YES) {
return;
} CGRect rect = [[notif.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat y = rect.origin.y;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
NSArray *subviews = [self subviews];
for (UIView *sub in subviews) { CGFloat maxY = CGRectGetMaxY(sub.frame);
if (maxY > y - 2) {
sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, sub.center.y - maxY + y - 2);
}
}
[UIView commitAnimations];
} - (void)keyboardShow:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
} - (void)keyboardWillHide:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
NSArray *subviews = [self subviews];
for (UIView *sub in subviews) {
if (sub.center.y < CGRectGetHeight(self.frame)/2.0) {
sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
}
}
[UIView commitAnimations];
} - (void)keyboardHide:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
}
最新文章
- c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
- h5移动端滑动的细节
- C# (事件触发)回调函数,完美处理各类疑难杂症!
- 好文EF
- Ubuntu系统安装配置Pintos和Bochs
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
- rhel-server-7.2-x86_64无法联网(VMware环境)
- 用Apache Kafka构建流数据平台
- Git存储用户名和密码(明文需谨慎)
- jq模拟操作
- 团队作业8----第二次项目冲刺(Beta阶段) 第三天
- MultipleOutputs新旧api
- python-ironicclient使用
- py-day4-4 python 其他内置函数
- Ext.js中自己扩展的EasyGrid
- centos7在upgrade的时候显示:Delta RPMs disabled because /usr/bin/applydeltarpm not installed
- C++进阶--析构函数中的异常
- 再读c++primer plus 005
- C++基本概念复习
- Struts2的ActionError&ActionMessage示例