当需要键盘的时候,键盘的出现可能会遮挡住某些控件,在编辑状态下看不到,一般的思路是把这个view向上偏移适当的距离.
比如下面的布局
,黄色的控件被挡住了.
因此,监听键盘出现和隐藏的两个事件.
1 /** 2 监听键盘事件 3 */ 4 override func viewDidAppear(animated: Bool){ 5 super.viewDidAppear(animated) 6 oldFrame = self.view.frame 7 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShow:", name: UIKeyboardWillShowNotification, object: nil) 8 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardHide", name: UIKeyboardWillHideNotification, object: nil) 9 10 }
对应方法的处理
1 //移除监听事件 2 override func viewWillDisappear(animated: Bool) { 3 super.viewWillDisappear(animated) 4 NSNotificationCenter.defaultCenter().removeObserver(self) 5 } 6 7 /** 8 键盘出现 9 */ 10 func keyboardShow(notifi:NSNotification){ 11 var infoDic : NSDictionary = notifi.userInfo! 12 var frameValue = infoDic.valueForKey(UIKeyboardFrameEndUserInfoKey) as?NSValue 13 var keyboardFrame = frameValue!.CGRectValue() 14 15 16 var detaY = keyboardFrame.origin.y - CGRectGetMaxY(chooseTextField.frame) 17 18 if detaY < 0{ 19 UIView.animateWithDuration(0.25, animations: { () -> Void in 20 var viewFrame = self.view.frame 21 viewFrame.origin.y = viewFrame.origin.y + detaY 22 self.view.frame = viewFrame 23 }) 24 } 25 26 27 } 28 /** 29 键盘消失 30 */ 31 func keyboardHide(){ 32 self.view.frame = oldFrame 33 34 }
完整的代码如下:红色和黄色控件都是UITextField
1 class ViewController: UIViewController,UITextFieldDelegate { 2 var textField1 : UITextField! 3 var textField2 : UITextField! 4 var chooseTextField : UITextField! 5 var oldFrame : CGRect! 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 initUI() 9 } 10 /** 11 监听键盘事件 12 */ 13 override func viewDidAppear(animated: Bool){ 14 super.viewDidAppear(animated) 15 oldFrame = self.view.frame 16 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShow:", name: UIKeyboardWillShowNotification, object: nil) 17 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardHide", name: UIKeyboardWillHideNotification, object: nil) 18 19 } 20 //移除监听事件 21 override func viewWillDisappear(animated: Bool) { 22 super.viewWillDisappear(animated) 23 NSNotificationCenter.defaultCenter().removeObserver(self) 24 } 25 26 /** 27 键盘出现 28 */ 29 func keyboardShow(notifi:NSNotification){ 30 var infoDic : NSDictionary = notifi.userInfo! 31 var frameValue = infoDic.valueForKey(UIKeyboardFrameEndUserInfoKey) as?NSValue 32 var keyboardFrame = frameValue!.CGRectValue() 33 34 35 var detaY = keyboardFrame.origin.y - CGRectGetMaxY(chooseTextField.frame) 36 37 if detaY < 0{ 38 UIView.animateWithDuration(0.25, animations: { () -> Void in 39 var viewFrame = self.view.frame 40 viewFrame.origin.y = viewFrame.origin.y + detaY 41 self.view.frame = viewFrame 42 }) 43 } 44 45 46 } 47 /** 48 键盘消失 49 */ 50 func keyboardHide(){ 51 self.view.frame = oldFrame 52 53 } 54 55 //build UI 56 func initUI(){ 57 textField1 = UITextField(frame: CGRectMake(50, 100, 220, 44)) 58 textField1.backgroundColor = UIColor.redColor() 59 textField1.delegate = self 60 self.view.addSubview(textField1) 61 62 textField2 = UITextField(frame: CGRectMake(50, 400, 220, 44)) 63 textField2.backgroundColor = UIColor.yellowColor() 64 textField2.delegate = self 65 self.view.addSubview(textField2) 66 67 } 68 69 //UITextFieldDelegate 70 func textFieldDidBeginEditing(textField: UITextField) { 71 chooseTextField = textField 72 } 73 74 override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 75 self.view.endEditing(true) 76 }
还有另外一种方法可以获取键盘的位置和大小,后面再添加了.