仅键盘覆盖文本字段时将视图向上移动

时间:2019-12-17 21:05:07

标签: ios swift iphone xcode ipad

我试图迅速为iPhone建立输入屏幕。屏幕上有许多输入字段。它们大多数位于屏幕顶部,但三个字段位于底部。当用户尝试在屏幕底部编辑文本时,键盘将弹出并覆盖屏幕。我找到了一种在发生这种情况时将屏幕向上移动的简单解决方案,但是结果是屏幕始终向上移动,并且当用户尝试编辑屏幕时,屏幕顶部的字段超出了范围。 例如:我想要从txt1到txt4的视图不会显示。

有没有办法让屏幕仅在编辑底部字段时移动?

我使用了在这里找到的这段代码:

覆盖func viewDidLoad(){

    txt1.delegate = self
    txt2.delegate = self
    txt3.delegate = self
    txt4.delegate = self
    txt5.delegate = self
    txt6.delegate = self
    txt7.delegate = self
    txt8.delegate = self
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)

}

func keyboardWillShow(通知:NSNotification){

    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if view.frame.origin.y == 0 {
            self.view.frame.origin.y -= keyboardSize.height
        }
        }

}

@objc func keyboardWillHide(notification: NSNotification) {
    if view.frame.origin.y != 0 {
        self.view.frame.origin.y = 0
    }
}

**

1 个答案:

答案 0 :(得分:0)

我在开始在文本字段上进行编辑时执行了此功能以开始显示键盘:

   public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)

      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

}

但是在这里,它适用于我所拥有的所有文本字段,并且存在相同的问题。 如何针对特定的文本字段创建它?