当键盘出现在iPhone的信息应用程序上时,如果用户从消息tableview开始向下滑动并继续进入键盘区域,则键盘将开始消失。如果在此过程中他们上下移动手指,则键盘也会随之移动。
苹果是否使用私有API来实现此功能,或者是否有一种方式可以通过(我想)手势识别器来控制键盘?
当键盘出现在iPhone的信息应用程序上时,如果用户从消息tableview开始向下滑动并继续进入键盘区域,则键盘将开始消失。如果在此过程中他们上下移动手指,则键盘也会随之移动。
苹果是否使用私有API来实现此功能,或者是否有一种方式可以通过(我想)手势识别器来控制键盘?
https://github.com/danielamitay/DAKeyboardControl
编辑: 它确实已经在应用商店上使用。
最简单的解决方案是设置以下两个属性:
搞定,baby!
keyboardDismissMode
。 - Bill幸运的是,苹果在UIScrollView
上添加了一个方便的属性keyboardDismissMode
,让您的生活变得更加轻松。
现在,只需在故事板上更改单个属性或添加一行代码,您的应用程序就可以像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属性,以在滚动时取消键盘:
希望这能帮助解决你的问题。
Go to your view in your xib and set the class for you view to UIControl.
Drag and connect the UISwipeGestureRecognizer from the Library to your view.
Connect the IBAction (TouchDown) with the UISwipeGestureRecognizer.
Write the code to dismiss the keyboard:
- (IBAction)dismiss:(id)sender
{
[yourTextField resignFirstResponder];
}
完成!
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”。
我非常确定键盘是在独立的视图中,位于您应用程序窗口之上(您无法访问/控制它,并且它始终显示在最上面,无论如何)。您能做的最多就是使输入视图成为/放弃第一响应者状态,键盘会相应地出现/消失:全有或全无。
您可能能够获取键盘视图的句柄并更改其框架属性(使用已记录类的未记录属性和未记录类),但我非常确定这将使您被从商店中踢出。