【发布时间】:2023-03-08 17:28:01
【问题描述】:
我正在使用滚动视图和自动布局来在键盘出现时移动视图并隐藏我的一个文本输入元素。为此,我使用以下功能。
问题是我无法让它同时适用于文本字段和文本视图。我进行了很多研究并尝试实现我在 SO 和其他资源上找到的所有答案,但大多数答案只处理单个文本字段而不是多个文本字段,我还没有找到一个文本字段和文本视图的单一解决方案。
我知道下面的代码是为文本字段设计的,但我正在尝试修改它以使其也适用于文本视图,因为在我见过的所有不同方式中,当键盘出现时移动视图,这是最好的对我来说。
我想知道是否有一种方法可以使用我当前的代码来移动我的文本字段和文本视图的视图。我也想知道这是否是移动视图的最佳方式。
键盘出现时移动视图的功能:
func keyboardWillShow(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 + 20, 0.0)
scrollView.contentInset = contentInsets
var aRect: CGRect = self.view.frame
aRect.size.height -= keyboardSize.height
let activeTextFieldRect: CGRect? = myTextField?.frame
let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin
if (!CGRectContainsPoint(aRect, activeTextFieldOrigin!)) {
scrollView.scrollRectToVisible(activeTextFieldRect!, animated:true)
}
}
func keyboardWillHide(sender: NSNotification) {
let contentInsets: UIEdgeInsets = UIEdgeInsetsZero
scrollView.contentInset = contentInsets
}
func textFieldDidBeginEditing(textField: UITextField) {
myTextField = textField
scrollView.scrollEnabled = true
}
func textFieldDidEndEditing(textField: UITextField) {
myTextField = nil
scrollView.scrollEnabled = true
}
我已经尝试实现textViewDidBeginEditing 和textViewDidEndEditing,然后在这一行中指定它来代替myTextView:let activeTextFieldRect: CGRect? = myTextField?.frame,但这似乎是一种草率的方法,并且无论如何都不起作用。非常感谢任何帮助。
【问题讨论】:
标签: ios swift user-interface textview uitextfield