键盘& textfields layout

时间:2016-12-14 19:44:47

标签: swift3 uikeyboard

我发布此信息是为了帮助人们遇到与我相同的问题,以及一个问题的答案。

在一个UIViewController中,我有多个文本字段,一些位于键盘上方,一些位于键盘下方。同时我在键盘上方有一个工具栏来切换UITextFields。

这就是视图的样子:

enter image description here

要设置文本字段的正确来源,我将不同答案的代码编译成以下代码:

注册keyboardShow和Hide:

override function viewDidLoad() {
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: .UIKeyboardWillHide, object: nil)
}

KeyboardWillShow选择器方法:

func keyboardWillShow(_ notification: Notification) {
    if let userInfo = notification.userInfo,
        let keyboard = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size {
        let keyboardHeight = self.view.frame.height - keyboard.height
        for (_, textField) in textFields.enumerated() {
            let textFieldBottom = textField.frame.origin.y + textField.frame.height
            let dif = textFieldBottom - keyboardHeight
            if textFieldBottom >= keyboardHeight {
                if textField.isFirstResponder {
                    self.view.frame.origin.y = 0
                    self.view.frame.origin.y -= dif
                }
            }
        }
    }
}

KeyboardWillHide选择器方法:

func keyboardWillHide(_ notification: Notification) {
    view.frame.origin.y = 0
}

我的问题现在是,当我快速点击工具栏中的某个箭头时,代码将无法移动必要的距离,因此正确的UITextField位于键盘上方。

示例:第一个不正确的答案是第一个响应者。我快速点击两次>箭头。第二个不正确的答案将是键盘上方的UITextField,而第三个不正确的答案将是第一个响应者并且用户无法查看。

0 个答案:

没有答案