牛逼轰轰的产品

记录苦逼的产品培育过程......

IOS键盘事件记

IOS5.0之前不支持键盘sizechange事件(5.0之前键盘尺寸一直保持不变),而5.1居然在键盘size改变时无法正常发出通知。所以要想捕获键盘尺寸变化的事件,可以在键盘didShow事件里通过beginSize和endSize和判断。


如果想让UI随着键盘的变化而变化(动画一致),需要在willshow及willhide里加入动画代码。动画的两个参数需要和键盘同步(animationDuration和animationCurve)。

获取键盘的动画参数:

NSDictionary *info = [notification userInfo];

NSTimeInterval duration = 0;

UIViewAnimationCurve curve;

[[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&duration];

[[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&curve];


duration在默认【中文拼音输入法】弹出时,不能正确获取duration,需要加一行代码修正:

duration = (duration > 0 ? duration: 0.25);//已知,IOS5.0.1里面键盘弹出动画的0.25S的,瑕疵:如果这里动画时间不是0.25就有可能动画不同步了


【Updated at 2012-05-12】键盘处于显示状态的UIViewController被UINavigationController pop出去时,也会发出 UIKeyboardWillHideNotification通知,只不过这个键盘隐藏的轨迹是【从左到右的滑动】而不是从上到下的收起。所以,如果想在这个通知的响应代码里去调整UI(比如恢复底部工具条的origin.y使其始终居于底部),应该避免横向滑动键盘消失这种情况。可以通过以下响应代码来鉴别是否横向滑动导致键盘消失:

NSDictionary *info = [notification userInfo];

CGPoint kbEndOrigin = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].origin;

if(kbEndOrigtin.x > 0) {//横向滑动导致了键盘消失,不必调整UI

return;

}

//恢复UI显示

...

评论