Swift 隱藏鍵盤

各種萌新在日常 iOS 的 App 開發(fā)中經(jīng)常會在編輯 UITextfeild UITextView 遇到鍵盤隱藏的問題:

  1. 鍵盤彈出后的收回
  2. 鍵盤遮擋住 UITextfeildUITextView

所以,在此分享能適應(yīng)絕大多數(shù)的場景 一行代碼隱藏鍵盤 的方法。

引入代碼段

在任何 .swift 文件中引入以下代碼

import UIKit

private var kUIViewFrame = "kk_UIViewFrame"
extension UIViewController {
    
    func setUpKeyboardAutoHidden() {
        let notficaCenter = NSNotificationCenter.defaultCenter()
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(UIViewController.touchedHiddenKeyBoard))
        
        objc_setAssociatedObject(self, &kUIViewFrame, NSValue(CGRect: self.view.frame), .OBJC_ASSOCIATION_RETAIN)
        
        // 添加tap手勢,收起鍵盤
        notficaCenter.addObserverForName(
            UIKeyboardWillShowNotification,
            object: nil,
            queue: NSOperationQueue.mainQueue()) { (notification) -> Void in
                self.view.addGestureRecognizer(tapGesture)
        }
        
        // 移除Tap手勢,避免和App中的UIResponder鏈沖突
        notficaCenter.addObserverForName(
            UIKeyboardWillHideNotification,
            object: nil,
            queue: NSOperationQueue.mainQueue()){ (notification) -> Void in
                self.view.removeGestureRecognizer(tapGesture)
        }
        
        // 鍵盤遮擋處理
        notficaCenter.addObserverForName(
            UIKeyboardWillChangeFrameNotification,
            object: nil,
            queue: NSOperationQueue.mainQueue()) { (notification) -> Void in
                let usrInfo = notification.userInfo!
                let keyboardRect = usrInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue
                if let respView = self.view.findFirstResponder {
                    
                    let convertRect = self.view.convertRect(respView.frame, fromView: respView.superview)
                    let offset = convertRect.origin.y + convertRect.height - keyboardRect.origin.y
                    var orignRect = objc_getAssociatedObject(self, &kUIViewFrame).CGRectValue
                    
                    if offset > 0 {
                        orignRect.origin.y = -offset
                    }
                    
                    UIView.animateWithDuration(0.3, animations: { () -> Void in
                        self.view.frame = orignRect
                    })
                }
        }
    }
    
    //取消所有的響應(yīng)者
    func touchedHiddenKeyBoard() {
        self.view.endEditing(true)
    }
}

使用

在引入以上代碼段后,在需要配置鍵盤隱藏的 UIViewController 中添加如下代碼:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 配置鍵盤隱藏
        setUpKeyboardAutoHidden()
    }
}

文章出自我的個人博客, 如需轉(zhuǎn)載, 請注明來源!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,445評論 4 61
  • “我來到你的城市,走過你來時的路,想象著——沒我的日子,你是怎樣的孤獨……” 買一張去舟山新城的票,坐4個小時的大...
    苡安喆閱讀 395評論 0 1
  • 不能選擇 更不可以忘記 多少縷 屬于黑夜的相思 消逝在青春的流光里 把酒言歡的日子 雕琢著虛無一樣的回憶 碎碎 零...
    向陽_sun閱讀 359評論 0 0
  • 今天和同事趁著在車站等車的空檔,兩個人隨便閑聊了幾句,聊著聊著就說起了小時候一些的事情,突然覺得蠻有趣的,現(xiàn)在拿出...
    俗人安安閱讀 323評論 8 5
  • 古人真是聰明?,F(xiàn)在只是技術(shù)的進步,用技術(shù)的進步反而掩蓋了深思的短板。古人技術(shù)短缺,反而有長時間去深思吧。 ...
    老驢的書屋閱讀 222評論 0 0

友情鏈接更多精彩內(nèi)容