[英]Dismiss keyboard with swipe gesture (as in Message app)
當鍵盤顯示在iPhone的消息應用程序上時,如果用戶從消息表視圖開始向下滑動並繼續進入鍵盤區域,鍵盤將開始關閉。 如果他們在此過程中上下移動手指,鍵盤會隨之移動。
Apple是否使用私有API執行此操作,或者是否有一種方法可以控制鍵盤(我假設)手勢識別器?
最簡單的解決方案是設置以下兩個屬性:
轟!寶貝!
幸運的是,Apple在UIScrollView
上添加了方便的屬性keyboardDismissMode
,讓您的生活更輕松。
現在,只需更改Storyboard上的單個屬性,或者添加一行代碼,您的應用就可以像Messages.app一樣運行!
此屬性使用新的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屬性:
希望有助於解決您的問題
您可以使用UISwipeGestureRecognizer執行此操作。 我不知道如何使用代碼實現它,但如果你使用新的xcode 4.2 beta,那么這是一個簡單的方法:
- (IBAction)dismiss:(id)sender;
轉到xib中的視圖,並將您查看的類設置為UIControl。
將UISwipeGestureRecognizer從庫拖動並連接到視圖。
將IBAction(TouchDown)與UISwipeGestureRecognizer連接。
編寫代碼來解雇鍵盤:
- (IBAction)dismiss:(id)sender { [yourTextField resignFirstResponder]; }
完成!
在swift中,您可以使用下面的代碼來獲取當前鍵盤的視圖容器( 如果存在 ),而不是您可以更改代碼中的框架:
UIApplication.shared.windows
.filter{ NSStringFromClass($0.classForCoder) == "UIRemoteKeyboardWindow" }
.first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetContainerView" }
.first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetHostView" }
.first
順便說一句,這里有一個名為Reveal的工具,你可以看到層次結構的視圖。
我認為最好的方法是在文本輸入容器上方放置一個隱藏按鈕。 長條帶,當它檢測到觸地得分並釋放或取消時,然后隱藏鍵盤。
我要去試試,我會告訴你我是怎么走的。
簡短的回答; 他們最有可能在那里做一些'私人API'的事情。
我非常確定鍵盤位於應用程序窗口上方的獨立視圖中(您無法訪問/控制它,無論如何,它始終顯示在頂部)。 您可以做的最多是讓輸入視圖成為/退出第一響應者狀態,鍵盤將相應地顯示/消失:全部或全部。
您可以獲得鍵盤視圖的句柄並更改其框架屬性(使用記錄的類和未記錄的類的未記錄的屬性),但我很確定這會讓您被踢出商店。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.