寫在前面:
? ? 想寫博客的想法很久了,由于懶和不知道寫什么外,擱置了很久才在今天開始下筆寫我的第一篇博客,如果你也是一名iOSer,并且剛好遇到了沒有解決的這樣的需求,剛好我的我的博客給了你解決問題的靈感,請(qǐng)給個(gè)贊哈?? 當(dāng)然如果你有更深的見地或者更好的其他解決的方法,還望不吝賜教哦,大家共同進(jìn)步(∩_∩)
? ? 好了步入正題,相信在項(xiàng)目中大家對(duì)于關(guān)閉鍵盤并不陌生,處理關(guān)閉鍵盤的做法一般分為兩種:1.放棄第一響應(yīng)者身份;2.當(dāng)前視圖結(jié)束編輯。通常情況下只要我們?cè)诤线m的時(shí)機(jī)去做這兩件事的任意一種,都會(huì)很穩(wěn)妥的如我們所愿----關(guān)閉鍵盤。但是,總有那么一些特殊情況使我們不能如意的關(guān)閉鍵盤,比如:在tableviewcell上有一個(gè)textfiled或者textview時(shí),我們想要點(diǎn)擊背部空白關(guān)閉鍵盤時(shí)確不能如愿。現(xiàn)在,我們一步一步的來解決這個(gè)問題,首先我們創(chuàng)建一個(gè)這樣的界面:
? ? 我們?cè)谝c(diǎn)擊屏幕空白處收起鍵盤最常見的處理方法是在剛點(diǎn)擊的方法中放棄第一響應(yīng)者身份或者結(jié)束編輯,如圖
但是運(yùn)行后發(fā)現(xiàn)這個(gè)方法不執(zhí)行,于是我們最常用的而且一用就成功的方法遭遇了tableview這個(gè)刺兒頭就不靈了。按照我們的理解,只要我們與界面有任何交互運(yùn)動(dòng),touchsBegan的方法就一定會(huì)執(zhí)行,但是我們?cè)谶@里打斷點(diǎn)顯示卻是沒有執(zhí)行,這是為什么呢?一般在viewController中實(shí)現(xiàn)這個(gè)方法,點(diǎn)擊背景時(shí),這個(gè)方法就會(huì)執(zhí)行,于是在tableviewController我們也潛移默化的認(rèn)為tableviewController下的tableview也會(huì)執(zhí)行這個(gè)方法,其實(shí)不然,因?yàn)閠ableviewController也是由viewController封裝而成,所以真正執(zhí)行touchsBegan的還是這個(gè)viewController下的view。
? ? 好了,既然這樣不行,那我們就給tableview加個(gè)tap手勢(shì)吧,代碼如下:
? ?然后我們?cè)俅芜\(yùn)行程序看看效果。。。。好嘞,終于鍵盤如愿關(guān)閉了,需求解決,不用加班了,于是收拾書包準(zhǔn)備回家唄。。。可是產(chǎn)品wang的聲音在你即將雙腳跨出辦公室門外的0.0001秒之前將你叫了回來:“怎么點(diǎn)擊cell不能跳轉(zhuǎn)了,還有刪除cell也刪除不了了?” 于是原本欣喜的心情瞬間如一萬頭草泥馬在心頭奔騰而過,回家的愿望破滅了,放下書包繼續(xù)擼代碼。。。。(tap手勢(shì)覆蓋了tableview里面自帶的手勢(shì),于是就不執(zhí)行didselect...的方法)
? ? 現(xiàn)在就利用響應(yīng)鏈機(jī)制來解決這個(gè)問題,事件響應(yīng)鏈機(jī)制我就不在這兒細(xì)說了,官方資料講的很明白了,主要就是查找事件源(調(diào)用hitTest...查找)和反饋給系統(tǒng)處理(調(diào)用.nextResponse),所以現(xiàn)在我們只需在點(diǎn)擊tableview的事件反饋給appdelegate處理之前關(guān)閉鍵盤就可以了,這樣既關(guān)閉了鍵盤,又不會(huì)由于覆蓋tableview封裝的手勢(shì)而導(dǎo)致cell的手勢(shì)操作異常問題。方法步驟如下:
? ? 1.由于我是用storyboard創(chuàng)建的界面,所以先創(chuàng)建一個(gè)繼承自UItableview的類,然后與storyboard里面tableview關(guān)聯(lián)。(純代碼一樣)
? ? 2.在這個(gè)類中實(shí)現(xiàn)hitText...的方法如下所示:
這段代碼的意思就是點(diǎn)擊的是tableview就結(jié)束編輯并且返回tableview本身,這樣就不影響了tableview本身的操作,然后點(diǎn)擊的是tableview的子視圖的時(shí)候就返回子視圖就行了。
? ? 好了,再次運(yùn)行程序,十指飛快的測(cè)試,bingo沒問題,背上書包光年速度飛奔回家!
以上內(nèi)容如有轉(zhuǎn)載請(qǐng)注明出處,同時(shí)歡迎大家多多提出意見,還是那句話,大家共同進(jìn)步,謝謝啦^_^!