如何防止键盘隐藏UITextField?
解决方法
我假设这是在UIViewController上发生的.如果是这样,您可以设置在键盘显示/隐藏时调用以下2个函数,并在其块中进行适当响应.
@H_403_6@设置UIViewController:
@H_403_6@首先,在ViewDidLoad中:
- class XXXViewController: UIViewController,UITextFieldDelegate... {
- var frameView: UIView!
@H_403_6@然后实现以下2个函数以响应上面ViewDidLoad中定义的NSNotificationCenter函数.我给你一个移动整个视图的例子,但你也可以只为UITextFields制作动画.
- override func viewDidLoad() {
- self.frameView = UIView(frame: CGRectMake(0,self.view.bounds.width,self.view.bounds.height))
- // Keyboard stuff.
- let center: NSNotificationCenter = NSNotificationCenter.defaultCenter()
- center.addObserver(self,selector: #selector(ATReportContentViewController.keyboardWillShow(_:)),name: UIKeyboardWillShowNotification,object: nil)
- center.addObserver(self,selector: #selector(ATReportContentViewController.keyboardWillHide(_:)),name: UIKeyboardWillHideNotification,object: nil)
- }
@H_403_6@不要忘记在离开视图时删除通知
- func keyboardWillShow(notification: NSNotification) {
- let info:NSDictionary = notification.userInfo!
- let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
- let keyboardHeight: CGFloat = keyboardSize.height
- let _: CGFloat = info[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber as CGFloat
- UIView.animateWithDuration(0.25,delay: 0.25,options: UIViewAnimationOptions.CurveEaseInOut,animations: {
- self.frameView.frame = CGRectMake(0,(self.frameView.frame.origin.y - keyboardHeight),self.view.bounds.height)
- },completion: nil)
- }
- func keyboardWillHide(notification: NSNotification) {
- let info: NSDictionary = notification.userInfo!
- let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
- let keyboardHeight: CGFloat = keyboardSize.height
- let _: CGFloat = info[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber as CGFloat
- UIView.animateWithDuration(0.25,(self.frameView.frame.origin.y + keyboardHeight),completion: nil)
- }
- override func viewWillDisappear(animated: Bool) {
- NSNotificationCenter.defaultCenter().removeObserver(self,object: nil)
- NSNotificationCenter.defaultCenter().removeObserver(self,object: nil)
- }