1.注册监听键盘事件的通知
[[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];
2.在键盘将要出现和隐藏的回调中,加入动画
- (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; } }
3.监听键盘删除键之非代理实现
在UITextField 和 UITextView ,如何监听到删除键。
我看到网上都是用代理监听的,我觉得不靠谱。
其实苹果已经写的很清楚了。
就在他们实现的协议里面~~
NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView<UITextInput> @protocol UITextInput<UIKeyInput> @protocol UIKeyInput <UITextInputTraits>- (BOOL)hasText;
- (void)insertText:(NSString *)text;
- (void)deleteBackward;
@end
-deleteBackward 这个方法就是删除按钮监听。
只要自己写个子类,重写此方法就能监听。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。