【问题标题】:Picker view hiding corresponding text field选择器视图隐藏相应的文本字段
【发布时间】:2021-07-22 12:11:44
【问题描述】:
我在情节提要中创建了多个 UITextField。一些文本字段使用键盘编辑,而其他文本字段使用选择器视图。在我的视图控制器中,对于使用pickerView 的字段,我为每个文本字段创建了单独的选择器视图。例如。
aTextField.inputView = aPickerView
现在对于屏幕底部的文本字段,当我点击其中一个时,与该文本字段对应的选取器视图会在底部打开并隐藏文本字段。我想在选择器视图打开时将当前选定的文本字段向上移动。
如果是键盘,可以通过回复UIResponder.keyboardWillShowNotification来完成视图切换。在选择器视图的情况下如何执行此操作?
【问题讨论】:
标签:
ios
swift
uiview
uitextfield
uipickerview
【解决方案1】:
我能想到的一个解决方案是观察键盘高度。当您按下必须显示底部文本字段的选择器视图时,使用键盘高度和一些额外的点将其移动到键盘上。以下是一些帮助方法来实现这一点:
override func viewDidLoad() {
super.viewDidLoad()
// Add keyboard observers
addObservers()
}
private func addObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
// keyboard will be active
@objc private func keyboardWillShow(notification: NSNotification) {
// Get keyboard Size
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
// update constraints / footerview height with keyboard height "keyboardSize.height"
}
}
// keyboard will dismiss
@objc private func keyboardWillHide(notification: NSNotification) {
if (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue != nil {
// update constraints / footerview height when keyboard is hidden,
}
}