尝试更改键盘高度时发生错误

时间:2019-09-07 19:22:35

标签: ios swift tpkeyboardavoiding

我是第一位iPhone开发人员。我的问题是,当我尝试根据键盘的高度更改视图的高度时发生错误。我曾经有一种方法。

使用前:

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        if (textField == self.walletNameField) {
            self.walletPasswordField.becomeFirstResponder()
        }
        else if (textField == self.walletPasswordField) {
            self.confirmField.becomeFirstResponder()
            view.frame.origin.y = -100
        }
        else{
            print("return Type ")
            view.frame.origin.y = 0
        }

        return true
    }

但这很不舒服,因为不同的设备必须以不同的方式进行操作。

使用后:

    @IBOutlet weak var mainText: UILabel!
    @IBOutlet weak var usbText: UITextView!

    @IBOutlet weak var walletName: UILabel!
    @IBOutlet weak var walletNameDetail: UILabel!
    @IBOutlet weak var walletNameField: UITextField!


    @IBOutlet weak var walletPassword: UILabel!
    @IBOutlet weak var walletPasswordDetail: UILabel!
    @IBOutlet weak var walletPasswordField: UITextField!

    @IBOutlet weak var passwordConfirm: UILabel!
    @IBOutlet weak var confirmField: UITextField!
    @IBOutlet weak var confirmConstant: NSLayoutConstraint!


    @IBOutlet weak var nextButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        changeViewFont()

        walletNameField.delegate = self
        walletPasswordField.delegate = self
        confirmField.delegate = self

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) 
    }

    override func viewWillDisappear(_ animated: Bool) {
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        if (textField == self.walletNameField) {
            self.walletPasswordField.becomeFirstResponder()
        }
        else if (textField == self.walletPasswordField) {
            self.confirmField.becomeFirstResponder()
//            view.frame.origin.y = -100
        }
        else{
            print("return Type ")
//            view.frame.origin.y = 0
        }

        return true
    }

    func adjustingHeight(_ show:Bool, notification:Notification) {
        // 1
        var userInfo = notification.userInfo!
        // 2
        let keyboardFrame:CGRect = (userInfo[UIResponder.keyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
        // 3
        let animationDurarion = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! TimeInterval
        // 4
        let changeInHeight = (keyboardFrame.height + 40) * (show ? 1 : -1)
        //5
        UIView.animate(withDuration: animationDurarion, animations: { () -> Void in
            self.confirmConstant.constant += changeInHeight
        })

    }

    @objc func keyboardWillChange(notification: Notification) {
        print("Keyboard show: \(notification.name.rawValue)")
        adjustingHeight(false, notification: notification )
    }

但是,一旦您触摸三个文本字段中的任何一个,这就是一个错误。我做错了什么?

错误是

  

线程1:信号SIGABRT

预先感谢

0 个答案:

没有答案