Swift實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤通知及一些處理詳解
前言
相信研究swift語(yǔ)言的開(kāi)發(fā)者都多多少少了解或者精通Objective—C語(yǔ)言,熟練掌握Objective—C語(yǔ)言的開(kāi)發(fā)者,在學(xué)習(xí)swift語(yǔ)言的過(guò)程中,是比較快速,而又輕松的。本文主要介紹的是關(guān)于Swift監(jiān)聽(tīng)鍵盤通知及一些處理的相關(guān)資料,之前也做過(guò)類似的功能,但是在Swift上面的效果不是很好。今天整理了一下之前小項(xiàng)目中的代碼和思路,很好的解決了在登錄界面登錄按鈕被鍵盤遮擋的問(wèn)題。
先看效果圖
如下
注冊(cè)鍵盤通知
//MARK:監(jiān)聽(tīng)鍵盤通知
func registerNotification(){
NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillShow(_ :)),
name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillHide(_ :)),
name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
根據(jù)鍵盤通知做出對(duì)應(yīng)的操作
//MARK:鍵盤通知相關(guān)操作
@objc func keyBoardWillShow(_ notification:Notification){
DispatchQueue.main.async {
/*
每次鍵盤發(fā)生變化之前,先恢復(fù)原來(lái)的狀態(tài)
y 是鍵盤布局的origin.y
y2 是登錄按鈕的origin.y+height
如果y>y2,登錄按鈕沒(méi)有被遮擋,不需要向上移動(dòng);反之,按鈕被遮擋,整體需要向上移動(dòng)一部分
*/
self.view.center = CGPoint.init(x: Width/2, y: Height/2)
let user_info = notification.userInfo
let keyboardRect = (user_info?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let y = keyboardRect.origin.y
let y2 = (self.nextStep?.frame.origin.y)! + (self.nextStep?.frame.size.height)! + 5
let offset_y = y2 > y ? (y2-y):(0)
UIView.animate(withDuration: 0.25, animations: {
self.view.center = CGPoint.init(x: Width/2, y: self.view.center.y - offset_y)
})
}
}
@objc func keyBoardWillHide(_ notification:Notification){
DispatchQueue.main.async {
self.view.center = CGPoint.init(x: Width/2, y: Height/2)
}
}
釋放鍵盤通知
因?yàn)檫@里只有這兩個(gè)通知,所以我選擇了removeObserver(self)來(lái)移除所有通知,當(dāng)然,你也可以根據(jù)通知名稱來(lái)逐個(gè)移除。
//MARK:釋放鍵盤監(jiān)聽(tīng)通知
func releaseNotification(){
NotificationCenter.default.removeObserver(self)
}
經(jīng)測(cè)試,上面的方法在4.0-5.5英寸的iPhone設(shè)備上正常運(yùn)行。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)我們的支持。
上一篇:Swift開(kāi)發(fā)應(yīng)用中如何更方便地使用顏色詳解
欄 目:Swift
下一篇:Swift如何為網(wǎng)頁(yè)承載頁(yè)面添加更多功能詳解
本文標(biāo)題:Swift實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤通知及一些處理詳解
本文地址:http://www.jygsgssxh.com/a1/Swift/11954.html
您可能感興趣的文章
- 01-11swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景詳解
- 01-11Swift利用Decodable解析JSON的一個(gè)小問(wèn)題詳解
- 01-11Swift中defer關(guān)鍵字推遲執(zhí)行示例詳解
- 01-11Swift中初始化init的方法小結(jié)
- 01-11Swift中定義單例的方法實(shí)例
- 01-11Swift利用純代碼實(shí)現(xiàn)時(shí)鐘效果實(shí)例代碼
- 01-11Swift中排序算法的簡(jiǎn)單取舍詳解
- 01-11Swift如何為設(shè)置中心添加常用功能
- 01-11Swift Json實(shí)例詳細(xì)解析
- 01-11Swift利用指紋識(shí)別或面部識(shí)別為應(yīng)用添加私密保護(hù)功能


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-11Swift利用Decodable解析JSON的一個(gè)小問(wèn)題
- 01-11swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景詳解
- 01-11Swift中初始化init的方法小結(jié)
- 01-11Swift中defer關(guān)鍵字推遲執(zhí)行示例詳解
- 01-11Swift利用純代碼實(shí)現(xiàn)時(shí)鐘效果實(shí)例代碼
- 01-11Swift中定義單例的方法實(shí)例
- 01-11Swift中排序算法的簡(jiǎn)單取舍詳解
- 01-11Swift Json實(shí)例詳細(xì)解析
- 01-11Swift如何為設(shè)置中心添加常用功能
- 01-11Swift利用指紋識(shí)別或面部識(shí)別為應(yīng)用添
隨機(jī)閱讀
- 01-11Mac OSX 打開(kāi)原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什


