[英]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.