如何防止键盘隐藏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) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。