我正在开发一个iOS应用程序,在该应用程序中,当用户点击按钮时,将调用一个显示键盘的功能(最初没有文本视图或文本字段。最初只显示键盘)。键盘在其输入附件视图中还包含一个textview或textfield。轻按textview或textfield时,textview成为第一响应者。这与iPhone上的Messages应用程序的工作方式非常相似,不同之处在于文本字段/视图包含在同一键盘的附件视图中,并且事先不可见。我正在努力想象这是怎么可能的-任何人都可以提供帮助吗?
答案 0 :(得分:1)
我不确定要完成的目标100%。此代码将在按下按钮时打开键盘,并且仅在用户开始键入时显示textField。
按下按钮时,我们将隐藏的textField的响应器设置为true。这样,我们在不显示textField的情况下打开了键盘。当用户开始键入内容时,我们将取消隐藏textField并将其约束更改为在键盘上方。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var textFieldBottomConstraint: NSLayoutConstraint!
var keyboardHeight: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
textField.isHidden = true
textField.delegate = self
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
}
@objc func buttonPressed() {
textField.becomeFirstResponder()
}
@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
self.keyboardHeight = keyboardHeight
}
}
}
extension ViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
textField.isHidden = false
textFieldBottomConstraint.constant = keyboardHeight
return true
}
}