gpt4 book ai didi

ios - Swift,在键盘后面移动内容不会在关闭后重置

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:04 25 4
gpt4 key购买 nike

我的一个 VC 中有一个 uiscrollview。在 scrollView 内部,我有多个 TF、按钮等。根据 Apple 文档,我使用下面的代码在调用键盘通知时向上移动 scrollView,以向上推隐藏的文本字段。但是,当我关闭键盘时,scrollView 不会重置或向下移动,它只是停留在“向上移动”的位置。

我是不是漏掉了什么?我有一个名为类的成员变量:

var activeTextField: UITextField!

我是否通过委托(delegate)方法正确地使用了它?

(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)
}

关于ios - Swift,在键盘后面移动内容不会在关闭后重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856003/

25 4 0
文章推荐: typescript - 两种方式的数据绑定(bind)不适用于