关于键盘

首先,你得监听键盘的事件,最基本的两个事件:

UIKeyboardWillShowNotification

UIKeyboardWillHideNotification

UIKeyboard...

iOS 5新增加了一些

UIKeyboardDidChangeFrameNotification(will)

一般情况下,前两个事件已经可以完成你要做的事情。在你的事件处理方法中加上NSNotification参数可以为你获得更多的东西:

view plainprint?

- (void)keyboardWillShow:(NSNotification *)notification 

{  

    CGPoint beginCentre = [[[notification userInfo] valueForKey:UIKeyboardCenterBeginUserInfoKey] CGPointValue]; 

    CGPoint endCentre = [[[notification userInfo] valueForKey:UIKeyboardCenterEndUserInfoKey] CGPointValue]; 

    CGRect keyboardBounds = [[[notification userInfo] valueForKey:UIKeyboardBoundsUserInfoKey] CGRectValue]; 

    CGRect keyboardFrames = [[[notification userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

    UIViewAnimationCurve animationCurve = [[[notification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; 

    NSTimeInterval animationDuration = [[[notification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 

 如果你要在程序中使用键盘的高度和宽度,永远不要尝试去手动指定,动态获取也很简单而且一定准确,不会出现键盘

挡住输入框的问题。

你可以利用这些参数把动画做的和键盘一致。假设你要把一个控件放在Window上,并且想让它的交互方式和键盘一样,

如果只是简单的做个向下偏移动画并不能很好的完成,因为你还要考虑从导航栏中Pop出来的时候,这个时候的键盘动画是

在x轴上偏移的,你用UIKeyboardFrameEndUserInfoKey获取的frame可以很准确的做到。

 

如果在某些特殊的字段上,你不想用默认的键盘,而是用类似于Picker这样的拾取器,你只需要设置inputView就行了,用你自定义的视图去替换掉键盘;如果你想在键盘上面再增加一个视图,比如toolbar,那么你可以不用自己对toolbar的位置进行控制,只需要设置inputAccessoryView就行了,这个值默认为nil,设置的视图将在你的控件变成第一响应者的时候显示在inputView的上方。

\\

 

在UIScrollView(UITableView继承于它)上,当你触碰控件使之变成第一响应者的时候,系统会自动调整位置,避免键盘挡住控件。如果在代码中用becomeFirstResponder使之变成第一响应者将不会出现自动调整。你可以设置contentOffset去手动调整。其他视图,最简单的方法就是修改控件的frame属性,让控件总是显示在可见区域。


  1. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{  
  2.     //返回一个BOOL值,指定是否循序文本字段开始编辑  
  3.     return YES;  
  4. }  
复制代码
  1. - (void)textFieldDidBeginEditing:(UITextField *)textField{  
  2.     //开始编辑时触发,文本字段将成为first responder  
  3. }  
复制代码
  1. - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{  
  2.     //返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder  
  3.     //要想在用户结束编辑时阻止文本字段消失,可以返回NO  
  4.     //这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息  
  5.     return NO;  
  6. }  
复制代码
  1. - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  
  2.     //当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。  
  3.     //这对于想要加入撤销选项的应用程序特别有用  
  4.     //可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。     
  5.     //要防止文字被改变可以返回NO  
  6.     //这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中  
  7.     return YES;  
  8. }  
复制代码
  1. - (BOOL)textFieldShouldClear:(UITextField *)textField{  
  2.     //返回一个BOOL值指明是否允许根据用户请求清除内容  
  3.     //可以设置在特定条件下才允许清除内容  
  4.     return YES;  
  5. }  
复制代码
  1. -(BOOL)textFieldShouldReturn:(UITextField *)textField{  
  2.     //返回一个BOOL值,指明是否允许在按下回车键时结束编辑  
  3.     //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起  
  4.     [textField resignFirstResponder];//查一下resign这个单词的意思就明白这个方法了  
  5.     return YES;  
  6. }  
复制代码
通知 UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件UITextFieldTextDidBeginEditingNotificationUITextFieldTextDidChangeNotificationUITextFieldTextDidEndEditingNotification当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知UIKeyboardWillShowNotification键盘显示之前发送UIKeyboardDidShowNotification键盘显示之后发送UIKeyboardWillHideNotification键盘隐藏之前发送UIKeyboardDidHideNotification键盘隐藏之后发送


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值