Swift实现监听键盘通知及一些处理详解

iOS中,监听键盘通知及处理键盘事件是比较常见的需求。这里我们来看看如何在Swift中实现这个功能。

1. 监听键盘通知我们可以监听以下三个键盘通知:

UIKeyboardWillShowNotification:键盘即将显示

UIKeyboardDidShowNotification:键盘显示完成

UIKeyboardWillHideNotification:键盘即将隐藏监听方法如下:

NotificationCenter.default.addObserver(self, 
                                       selector: #selector(keyboardWillShow(_:)), 
                                       name: UIKeyboardWillShowNotification, 
                                       object: nil)
NotificationCenter.default.addObserver(self,
                                       selector: #selector(keyboardDidShow(_:)),  
                                       name: UIKeyboardDidShowNotification, 
                                       object: nil)  
NotificationCenter.default.addObserver(self, 
                                       selector: #selector(keyboardWillHide(_:)),
                                       name: UIKeyboardWillHideNotification, 
                                       object: nil)

2. 键盘事件处理当接收到键盘通知时,会调用对应的方法(keyboardWillShow、keyboardDidShow、keyboardWillHide)来处理事件:

@objc func keyboardWillShow(_ notification: Notification) {
    // 获取键盘高度,调整界面UI
}
    
@objc func keyboardDidShow(_ notification: Notification) {
    // 键盘显示完成后的处理    
}

@objc func keyboardWillHide(_ notification: Notification) {
    // 键盘隐藏前的处理  
}

在这些方法中,我们可以获取键盘的高度,并调整界面View的位置来避免键盘覆盖输入框。例如:

// 键盘显示通知
@objc func keyboardWillShow(_ notification: Notification) { 
    // 获取键盘高度
    let info = notification.userInfo!
    let keyboardHeight = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue.height
        
    // 获取输入框距离底部的距离
    let textViewBottom = textView.convert(textView.bounds, to: nil).maxY 
    let distanceFromTextViewToBottom = view.frame.size.height - textViewBottom
        
    // 如果键盘遮挡输入框,则调整输入框的位置
    if distanceFromTextViewToBottom < keyboardHeight {
        var frame = textView.frame
        frame.origin.y -= keyboardHeight - distanceFromTextViewToBottom 
        textView.frame = frame
    }
}

这就是在Swift中监听键盘事件和处理键盘通知的基本流程。

除了调整界面UI避免键盘遮挡外,我们也可以在这些方法中做一些其他键盘交互相关的处理。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论