如何防止键盘隐藏UITextField?
解决方法
我假设这是在UIViewController上发生的.如果是这样,您可以设置在键盘显示/隐藏时调用以下2个函数,并在其块中进行适当响应.
设置UIViewController:
class XXXViewController: UIViewController,UITextFieldDelegate... { var frameView: UIView!
首先,在ViewDidLoad中:
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) }
然后实现以下2个函数以响应上面ViewDidLoad中定义的NSNotificationCenter函数.我给你一个移动整个视图的例子,但你也可以只为UITextFields制作动画.
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) }