【问题标题】:Move subview up when keyboard displayed over textfields in subview当键盘显示在子视图中的文本字段上时,向上移动子视图
【发布时间】:2017-10-20 02:54:28
【问题描述】:

我在子视图中有两个文本字段,当在子视图中单击任何文本字段并出现键盘时,我试图将子视图向上移动。问题是当子视图打开时子视图向下移动并且我单击了第二个文本字段。当我触摸除文本字段之外的任何视图时,它应该隐藏。

我的两个textfield和subview的定义;

@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var loginView: UIView!

viewDidLoad 中的代码

    NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)

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

还有另外两个显示和隐藏键盘的功能

func keyboardWillShow(notification: NSNotification) {

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if loginView.frame.origin.y == 0{
            let height = keyboardSize.height

            self.loginView.frame.origin.y += height
        }

    }

}

func keyboardWillHide(notification: NSNotification) {


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

    }
}

我想知道在子视图打开时单击文本字段时如何避免子视图向下。

【问题讨论】:

    标签: swift keyboard uitextfield


    【解决方案1】:

    当键盘关闭时,只需将视图的 y 原点设为零。 当您在键盘打开时点击另一个文本字段时,这是 . func keyboardWillHide(notification: NSNotification) {

    func keyboardWillShow(notification: NSNotification) {
    
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            if loginView.frame.origin.y == 0{
                let height = keyboardSize.height
    
                self.loginView.frame.origin.y = -height
            }
    
        }
    
    }
    
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            if loginView.frame.origin.y != 0 {
                let height = keyboardSize.height
                self.loginView.frame.origin.y = 0
            }
    
        }
    }
    

    【讨论】:

    • 我不想将子视图移动到 self.view 的顶部,我只想将子视图向上移动到键盘高度。谢谢,但你的建议没有像我预期的那样奏效,我的也是。
    • 我的代码会根据键盘的高度向上移动视图。默认情况下,您的键盘 y 原点将为 0,当键盘出现时,假设高度为 100,因此您的视图应位于 -100 y 原点,我的代码也是如此。无论他的最后一个来源是什么,我的代码都会将视图移动到上方 100 点。但是您正在向上移动视图以从他之前的 y 位置向上移动 100 点。所以我只是用 (- height) 删除 += 它不会减去 y,它只会否定你的 y 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2014-11-23
    • 1970-01-01
    • 2011-08-23
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多