[iOS] UIScrollView與軟鍵盤配合心得——點擊空白處隱藏軟鍵盤(完美方案,不增代碼)


作者:zyl910

  “點擊空白處隱藏軟鍵盤”是一個很常見的功能。最簡單的實現辦法是將背景View設為為UIControl類,然后在Touch Down事件中隱藏軟鍵盤。詳見 http://www.cnblogs.com/zyl910/archive/2013/03/29/ios_textfield_keyboard.html
  但是當文本框放在UIScrollView控件中時,上述方法就失效了。UIScrollView本身沒有提供觸摸事件,但它會攔截觸摸操作,使背景View無法收到觸摸事件。
  該怎么辦呢?

  曾在網絡上找到過一個解決方案——寫UIScrollView的派生類,提供觸摸事件。該方案存在不少缺點,如代碼復雜、觸摸事件容易與UIScrollView的拖曳滾動功能沖突。實用性不高。

  今天我突然想到了完美的解決方案。只需在界面中多加一個控件,不需增加代碼,可沿用原來“View中點擊空白處隱藏軟鍵盤”的代碼。而且隱藏軟鍵盤操作不會與UIScrollView的拖曳滾動功能沖突。哈哈,厲害吧!

  前面吹噓了那么多,其實解決方案十分簡單,類似腦經急轉彎。
  具體辦法——
1. 在UIScrollView中放一個View。
2. 在該View中放置各種控件。
3. 將該View的類名改為UIControl,處理Touch Down 事件關閉軟鍵盤。

  本來我擔心UIScrollView上面的View會攔截觸摸事件,使UIScrollView不能正常拖曳滾動。但運行后發現效果完美。
  這是因為UIScrollView優先搶占了觸摸事件,當它判斷不是拖曳滾動時,才會放棄對觸摸事件的搶占,使它上面的View接收到觸摸事件。

  其次關於關閉軟鍵盤,我找了更簡單的代碼——

- (IBAction)view_TouchDown:(id)sender {
    [self.view endEditing:YES];
}

 

  最后是關於軟鍵盤遮擋問題的處理心得。
  當軟鍵盤顯示時,UIScrollView不會自動縮小到非軟鍵盤區域,導致下半部分被遮擋、無法操作。
  對於這個問題,常規辦法是接收軟鍵盤顯示/隱藏通知,然后人工計算非軟鍵盤區域的尺寸,再設置UIScrollView的位置。該方法不僅代碼復雜,而且難以適應橫屏模式及有很多控件的情況。
  我是這樣處理的——將UIScrollView的Content Insets Bottom 與 View的Height 同設為一個稍大的數值,即擴大內容的高度,使下面留有足夠的空白用於顯示軟鍵盤。這樣雖然不夠精致,但也能解決遮擋問題。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM