当需要键盘的时候,键盘的出现可能会遮挡住某些控件,在编辑状态下看不到,一般的思路是把这个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     }

还有另外一种方法可以获取键盘的位置和大小,后面再添加了.

 

posted on 2015-07-22 09:21  农场的小伙  阅读(275)  评论(0编辑  收藏  举报