首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

对UITextField的键盘处置方法<摘抄>

2013-08-13 
对UITextField的键盘处理方法摘抄-?(void)registerForKeyboardNotifications??{??????//添加自己做为观

对UITextField的键盘处理方法<摘抄>

  1. -?(void)registerForKeyboardNotifications??
  2. {??
  3. ????//添加自己做为观察者,以获取键盘显示时的通知??
  4. ????[[NSNotificationCenter?defaultCenter]?addObserver:self??
  5. ?????????????????????????????????????????????selector:@selector(keyboardWasShown:)??
  6. ?????????????????????????????????????????????????name:UIKeyboardDidShowNotification?object:nil];??
  7. ????//添加自己做为观察者,以获取键盘隐藏时的通知??
  8. ????[[NSNotificationCenter?defaultCenter]?addObserver:self??
  9. ?????????????????????????????????????????????selector:@selector(keyboardWasHidden:)??
  10. ?????????????????????????????????????????????????name:UIKeyboardDidHideNotification?object:nil];??
  11. }??
  12. ??
  13. //?键盘出现时调用此方法??
  14. -?(void)keyboardWasShown:(NSNotification*)aNotification??
  15. {??
  16. ????//如果键盘是显示状态,不用做重复的操作??
  17. ????if?(keyboardShown)??
  18. ????????return;??
  19. ??????
  20. ????//获得键盘通知的用户信息字典??
  21. ????NSDictionary*?info?=?[aNotification?userInfo];??
  22. ??????
  23. ????//?取得键盘尺寸.??
  24. ????NSValue*?aValue?=?[info?objectForKey:UIKeyboardBoundsUserInfoKey];??
  25. ????CGSize?keyboardSize?=?[aValue?CGRectValue].size;??
  26. ??????
  27. ????//?重新设置scrollView的size??
  28. ????CGRect?viewFrame?=?[myScrollView?frame];??
  29. ????viewFrame.size.height?-=?keyboardSize.height;??
  30. ????myScrollView.frame?=?viewFrame;??
  31. ??????
  32. ??????
  33. ????//?把当前被挡住的text?field滚动到view中适当的可见位置.??
  34. ????CGRect?textFieldRect?=?[activeField?frame];??
  35. ????[myScrollView?scrollRectToVisible:textFieldRect?animated:YES];??
  36. ??????
  37. ??????
  38. ????//记录当前textField的偏移量,方便隐藏键盘时,恢复textField到原来位置??
  39. ????oldContentOffsetValue?=?[myScrollView?contentOffset].y;??
  40. ??????
  41. ????//计算textField滚动到的适当位置??
  42. ????CGFloat?value?=?(activeField.frame.origin.y+myScrollView.frame.origin.y+activeField.frame.size.height?-?self.view.frame.size.height?+?keyboardSize.height)+2.0f;??
  43. ??????
  44. ????//value>0则表示需要滚动,小于0表示当前textField没有被挡住,不需要滚动??
  45. ????if?(value?>?0)?{??
  46. ????????//使textField滚动到适当位置??
  47. ????????[myScrollView?setContentOffset:CGPointMake(0,?value)?animated:YES];??
  48. ????????isNeedSetOffset?=?YES;//更改状态标志为需要滚动??
  49. ????}??
  50. ??
  51. ????//更改键盘状态标志为已显示??
  52. ????keyboardShown?=?YES;??
  53. }??
  54. ??
  55. ??
  56. //?键盘隐藏时调用此方法??
  57. -?(void)keyboardWasHidden:(NSNotification*)aNotification??
  58. {??
  59. ??
  60. ??????
  61. ????NSDictionary*?info?=?[aNotification?userInfo];??
  62. ??????
  63. ????//?Get?the?size?of?the?keyboard.??
  64. ????NSValue*?aValue?=?[info?objectForKey:UIKeyboardBoundsUserInfoKey];??
  65. ????CGSize?keyboardSize?=?[aValue?CGRectValue].size;??
  66. ??????
  67. ????//?Reset?the?height?of?the?scroll?view?to?its?original?value??
  68. ????CGRect?viewFrame?=?[myScrollView?frame];??
  69. ????viewFrame.size.height?+=?keyboardSize.height;??
  70. ????myScrollView.frame?=?viewFrame;??
  71. ??????
  72. ????//如果状态标志为需要滚动,则要执行textFiled复位操作??
  73. ????if?(isNeedSetOffset)?{??
  74. ????????//oldContentOffsetValue记录了textField原来的位置,复位即可??
  75. ????????[myScrollView?setContentOffset:CGPointMake(0,?oldContentOffsetValue)?animated:YES];??
  76. ????}??
  77. ??
  78. ????//复位状态标志??
  79. ????isNeedSetOffset?=?NO;??
  80. ????keyboardShown?=?NO;??
  81. } ?

热点排行