如何让它在视图出现时显示在原来的位置?

问题描述 投票:0回答:1

我创建了一个文本字段并编写了下面的代码,以使文本字段在键盘出现时出现在键盘的正上方。 但文本字段是从上到下显示的 我希望它立即出现 我该怎么办?

inputTextField = UITextField(frame: CGRect(x:0, y: 0, width: UIScreen.main.bounds.width, height: 50))
inputTextField.font = UIFont.systemFont(ofSize: 15)
inputTextField.backgroundColor = .white
inputTextField.borderStyle = UITextField.BorderStyle.bezel
inputTextField.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center

view.addSubview(inputTextField)

registerKeyboardNotifications()
func registerKeyboardNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
    
@objc func keyboardWillShow(_ notification: Notification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        let textFieldOrigin = CGPoint(x: 0, y: keyboardSize.origin.y - inputTextField.frame.height)
        
        inputTextField.frame.origin = textFieldOrigin
    }
}

@objc func keyboardWillHide(_ notification: Notification) {
    inputTextField.frame.origin = CGPoint(x: 0, y: 5000)
    inputTextField.resignFirstResponder()
}
ios swift uikit
1个回答
1
投票

显示键盘时,UI 更改会自动动画化。

keyboardDidShowNotification
添加观察者 - 在 willShow 中设置
hidden
文本字段的原点,然后在
.isHidden = false
中设置
didShow

这是一个例子:

class ViewController: UIViewController {
    
    var inputTextField: UITextField!
    var showBtn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        inputTextField = UITextField(frame: CGRect(x:0, y: 0, width: UIScreen.main.bounds.width, height: 50))
        inputTextField.font = UIFont.systemFont(ofSize: 15)
        inputTextField.backgroundColor = .white
        inputTextField.borderStyle = UITextField.BorderStyle.bezel
        inputTextField.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center

        // start with text field hidden
        inputTextField.isHidden = true
        
        view.addSubview(inputTextField)
        
        var cfg = UIButton.Configuration.filled()
        cfg.title = "Show"
        showBtn = UIButton(configuration: cfg, primaryAction: UIAction() { _ in
            if self.inputTextField.isFirstResponder {
                self.inputTextField.resignFirstResponder()
            } else {
                self.inputTextField.becomeFirstResponder()
            }
        })
        showBtn.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(showBtn)
        showBtn.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 40.0).isActive = true
        showBtn.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 40.0).isActive = true

        registerKeyboardNotifications()
        
    }
    
    func registerKeyboardNotifications() {
        // Register for keyboard notifications
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)

        // also add a keyboardDidShowNotification observer
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow(_:)), name: UIResponder.keyboardDidShowNotification, object: nil)
    }
    
    @objc func keyboardWillShow(_ notification: Notification) {
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            let textFieldOrigin = CGPoint(x: 0, y: keyboardSize.origin.y - inputTextField.frame.height)

            // set the hidden textfield's origin
            self.inputTextField.frame.origin = textFieldOrigin
        }
    }
    @objc func keyboardDidShow(_ notification: Notification) {
        // show the textfield
        self.inputTextField.isHidden = false
        // update the button title
        self.showBtn.configuration?.title = "Hide"
    }
    @objc func keyboardWillHide(_ notification: Notification) {
        // hide the textfield
        inputTextField.isHidden = true
        // update the button title
        self.showBtn.configuration?.title = "Show"
    }
}

        
© www.soinside.com 2019 - 2024. All rights reserved.