2011-08-20 26 views
27

當iPhone的Messages應用程序顯示鍵盤時,如果用戶從消息tableview開始向下滑動並繼續進入鍵盤區域,鍵盤將開始關閉。如果他們在此過程中上下移動手指,則鍵盤會隨之移動。以滑動手勢關閉鍵盤(如在消息應用程序中)

蘋果是用私有API來做這件事,還是有辦法像這樣控制鍵盤(我認爲)手勢識別器?

+0

它不會在我的iPhone上這樣做。 (3GS,iOS 4.3.3) – Mundi

+0

啊,這可能假設在未來的OS版本中。原則上,我想討論如何獲得這樣的效果。 –

+0

我相信這是一個iOS 5.x功能。現在應該退出NDA。 –

回答

6

您可以使用UISwipeGestureRecognizer來執行此操作。我不知道如何使用代碼來實現它,但如果您使用的是新的Xcode 4.2測試版,然後下面有一個簡單的方法:

  1. 創建一個IBAction爲:

- (IBAction)dismiss:(id)sender;

  1. 在你的xib中轉到你的視圖,併爲你查看UIControl。

  2. 將UISwipeGestureRecognizer從庫中拖放到視圖中。

  3. 將IBAction(TouchDown)連接到UISwipeGestureRecognizer。

  4. 編寫代碼以關閉鍵盤:

    - (IBAction)dismiss:(id)sender 
    
    { 
    
        [yourTextField resignFirstResponder]; 
    
    } 
    

完成!

+0

這是行不通的。鍵盤會滑落並消失,但在手勢完成之前手指再次向上移動時不會再回來。 – Mundi

+0

那麼,這是唯一的方法,以解僱一個我知道的滑動手勢的鍵盤。只是想幫忙! – JonasG

+0

同意JonasG。而Apple可能使用的是一種UIPanGestureRecognizer,它需要他們自己的內部知識來控制鍵盤的框架,使其以Messages.app中的方式上下滑動。最接近的是使用UISwipeGestureRecognizer(或者UIPanGestureRecognizer,儘管它的行爲幾乎與滑動相同,因爲下來會開始運動,並且沒有辦法阻止鍵盤在此時消失)。 –

0

我認爲最好的方法是在文本輸入容器上放置一個隱藏的按鈕。一個長條,當它檢測到觸地和釋放或取消,然後隱藏鍵盤。

我要試一下,我會讓你知道我是怎麼去的。

0

簡答題;他們很可能在那裏做一些'私人API'的事情。

我很確定鍵盤是在獨立視圖中,位於您的應用程序窗口之上(您無權訪問/控制它,並始終顯示在頂部,無論如何)。您可以做的最多的是讓輸入視圖成爲/退出第一響應者狀態,並且鍵盤將相應地出現/消失:全部或全部。

您可能能夠獲取鍵盤視圖的句柄並更改其框架屬性(使用記錄的類的未記錄屬性以及未記錄的類),但我相當肯定會讓您退出存儲。

44

我創建了一個UIView的類別提供所需的功能:

https://github.com/danielamitay/DAKeyboardControl

編輯: 確實已經在App Store中。

+3

簡直太棒了!(_someone_需要接受這個作爲答案) –

+0

優秀,你應該有超過10個upvotes的東西! –

+0

真棒真棒真棒..... –

10

在iOS 7中,您現在可以在UIScrollView上交互式地關閉鍵盤。

Dismissing the keyboard in a UIScrollView

希望幫助別人。

+0

我的回答包含以下無需提供鏈接,有可能在未來 –

27
+2

這種改變應該是公認的答案更多細節。在iOS 7之後,所有你需要的是'keyboardDismissMode'。 – Bill

+0

我有一個包含textField的UIView。我怎樣才能做到這一點? –

+0

@GabyFitcal很好。閱讀以上所有鏈接。我更新了它們。 – ma11hew28

22

幸運的是,蘋果在UIScrollView上添加了方便的物業keyboardDismissMode,讓您的生活變得輕鬆一些。

現在您的應用程序可以像Messages.app一樣改變Storyboard上的單個屬性,或者添加一行代碼!

此屬性使用新的UIScrollViewKeyboardDismissMode枚舉。此枚舉的可能值如下:

UIScrollViewKeyboardDismissModeNone  // the keyboard is not dismissed automatically when scrolling 
UIScrollViewKeyboardDismissModeOnDrag  // dismisses the keyboard when a drag begins 
UIScrollViewKeyboardDismissModeInteractive // the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss 

這裏的Storyboard屬性更改爲解僱滾動鍵盤:

enter image description here

希望幫助您解決問題,

+0

這太好了。興奮起來,我無事可做,只是勾選了一個框。然後意識到我的鍵盤頂部附帶的輸入視圖並未隨之移動...... doh。 – bandejapaisa

1

swift你可以使用下面的代碼來獲取當前鍵盤的視圖容器(如果存在),比你可以更改在你的代碼e是的框架:這裏

UIApplication.shared.windows 
    .filter{ NSStringFromClass($0.classForCoder) == "UIRemoteKeyboardWindow" } 
    .first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetContainerView" } 
    .first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetHostView" } 
    .first 

順便說是一個叫Reveal工具,讓你可以看到視圖層次。