我在我的一个VC中有一个uiscrollview.在scrollView中,我有多个TF,按钮等.我使用下面的代码,根据Apple文档,在调用键盘通知时向上移动scrollView,以推高隐藏的文本字段.但是,当我关闭键盘时,scrollView不会重置或向下移动,它只是停留在“向上移动”的位置.
我在这里错过了什么吗?我有一个名为的类的成员变量:
var activeTextField: UITextField!
我是否正确使用了委托方法?
(func registerForKeyboardNotifications() {
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addobserver(self,selector: "keyboardWillBeShown:",name: UIKeyboardWillShowNotification,object: nil)
notificationCenter.addobserver(self,selector: "keyboardWillBeHidden:",name: UIKeyboardWillHideNotification,object: nil)
}
func keyboardWillBeShown(sender: NSNotification) {
let info: NSDictionary = sender.userInfo!
let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue
let keyboardSize: CGSize = value.CGRectValue().size
let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0,0.0,keyboardSize.height,0.0)
scrollView.contentInset = contentInsets
scrollView.scrollIndicatorInsets = contentInsets
// If active text field is hidden by keyboard,scroll it so it's visible
// Your app might not need or want this behavior.
var aRect: CGRect = self.view.frame
aRect.size.height -= keyboardSize.height
let activeTextFieldRect: CGRect? = activeTextField?.frame
let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin
if (!CGRectContainsPoint(aRect,activeTextFieldOrigin!)) {
scrollView.scrollRectToVisible(activeTextFieldRect!,animated:true)
}
}
// Called when the UIKeyboardWillHideNotification is sent
func keyboardWillBeHidden(sender: NSNotification) {
let contentInsets: UIEdgeInsets = UIEdgeInsetsZero
scrollView.contentInset = contentInsets
scrollView.scrollIndicatorInsets = contentInsets
}
func textFieldDidBeginEditing(textField: UITextField!) {
activeTextField = textField
scrollView.scrollEnabled = true
}
func textFieldDidEndEditing(textField: UITextField!) {
activeTextField = nil
scrollView.scrollEnabled = false
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.registerForKeyboardNotifications()
}
override func viewDiddisappear(animated: Bool) {
super.viewWilldisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
解决方法
我这样做了,它对我有用.似乎比你的方式容易多了.我为我的项目使用了UITextView.但它应该与UITextField一样. – / 25只是为了让标题显示出来.
func textViewDidBeginEditing(textView: UITextView) {
myScrollView.setContentOffset(CGPointMake(0,textView.frame.origin.y-25),animated: true)
}
func textViewDidEndEditing(textView: UITextView) {
myScrollView.setContentOffset(CGPointMake(0,-textView.frame.origin.y+25),animated: true)
}