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

來源:互聯網
上載者:User

作者: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 同設為一個稍大的數值,即擴大內容的高度,使下面留有足夠的空白用於顯示軟鍵盤。這樣雖然不夠精緻,但也能解決遮擋問題。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.