当iPhone的消息应用程序上显示键盘时,如果用户从消息表视图开始向下滑动并继续进入键盘区域,键盘将开始关闭。如果他们在此过程中上下移动手指,键盘会随之移动。
Apple是否使用私有API执行此操作,或者是否有办法从(我假设)手势识别器控制键盘?
答案 0 :(得分:44)
答案 1 :(得分:31)
最简单的解决方案是设置以下两个属性:
砰的一声,宝贝!答案 2 :(得分:24)
幸运的是,Apple在keyboardDismissMode
添加了方便的属性UIScrollView
,让您的生活更轻松。
现在,只需更改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属性:
希望有助于解决您的问题
答案 3 :(得分:10)
答案 4 :(得分:5)
您可以使用UISwipeGestureRecognizer执行此操作。我不知道如何使用代码实现它,但如果你使用新的xcode 4.2 beta,那么这是一个简单的方法:
- (IBAction)dismiss:(id)sender;
转到xib中的视图,并将您查看的类设置为UIControl。
将UISwipeGestureRecognizer从库拖动并连接到您的视图。
将IBAction(TouchDown)与UISwipeGestureRecognizer连接。
编写代码以关闭键盘:
- (IBAction)dismiss:(id)sender
{
[yourTextField resignFirstResponder];
}
完成!
答案 5 :(得分:2)
在 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的工具,可以让您看到层次化的视图。
答案 6 :(得分:0)
我认为最好的方法是在文本输入容器上方放置一个隐藏按钮。长条带,当它检测到触地得分并释放或取消时,然后隐藏键盘。
我要去试试,我会让你知道我的去向。
答案 7 :(得分:0)
简短回答;他们最有可能在那里做一些“私人API”。
我非常确定键盘位于应用程序窗口上方的独立视图中(您无法访问/控制它,无论如何,它始终显示在顶部)。您可以做的最多就是让输入视图成为/退出第一响应者状态,键盘将相应地显示/消失:全部或全部。
您可以获得键盘视图的句柄并更改其框架属性(使用记录的类和未记录的类的未记录的属性),但我很确定这会让您被踢出商店。