swift 当只有键盘覆盖文本字段时向上移动视图

goucqfw6  于 2023-04-19  发布在  Swift
关注(0)|答案(1)|浏览(133)

我正在尝试在swift中为iPhone构建一个输入屏幕,屏幕有多个输入字段,大部分在屏幕顶部,但有三个字段在底部,当用户试图编辑屏幕底部的文本时,键盘会弹出,它会覆盖屏幕,我发现了一个简单的解决方案,当这种情况发生时,将屏幕向上移动但是结果是屏幕总是向上移动,并且当用户试图编辑屏幕顶部的字段时,屏幕顶部的字段移动到无法触及的位置。例如:我想从txt1到txt4视图不会上升。
有没有一种方法可以让屏幕只在编辑底部字段时移动?
我使用了我在这里找到的代码:

override 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(notification: 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
    }
}
unhi4e5o

unhi4e5o1#

我做了这个函数来启动显示键盘,同时我开始编辑文本字段:

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)
}

但在这里,它的所有的文本字段,我有和它的相同的问题。我如何才能使它为特定的文本字段?

相关问题