用滑动手势closures键盘(如在消息应用程序中)
当iPhone的Messages应用程序显示键盘时,如果用户从消息tableview开始向下滑动并继续进入键盘区域,键盘将开始closures。 如果在这个过程中他们的手指上下移动,键盘会随之移动。
苹果是用私有API来做这件事,还是有办法像这样控制键盘(我认为)手势识别器?
我创build了一个UIView类别,提供了所需的function:
https://github.com/danielamitay/DAKeyboardControl
编辑:它确实已经在应用程序商店使用。
最简单的解决方法是设置以下两个属性:
-
UIViewController : UIResponder
inputAccessoryView
-
UITableView : UIScrollView
keyboardDismissMode
轰隆,宝贝!
查看Acani聊天 iPhone客户端 ChatViewController.swift
的例子。
幸运的是,苹果在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属性更改为closures滚动键盘:
希望能帮助解决你的问题
在iOS 7中,您现在可以在UIScrollView上交互式地closures键盘。
在UIScrollView中closures键盘
希望能帮助别人。
您可以使用UISwipeGestureRecognizer来执行此操作。 我不知道如何使用代码来实现它,但是如果你正在使用新的xcode 4.2testing版,那么可以使用一个简单的方法:
- 创build一个IBAction:
- (IBAction)dismiss:(id)sender;
-
在你的xib中转到你的视图,并为你查看UIControl。
-
将UISwipeGestureRecognizer从库中拖放到视图中。
-
连接IBAction(TouchDown)和UISwipeGestureRecognizer。
-
编写代码以closures键盘:
- (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的工具,可以让你看到分层的视图。
我认为最好的方法是在文本input容器上方放置一个隐藏的button。 一个长条,当它检测到触地并释放或取消,然后隐藏键盘。
我要去尝试一下,我会让你知道我怎么走。
简短的回答; 他们很可能在那里做一些“私人API”的事情。
我很确定键盘是独立的,在你的应用程序的窗口之上(你不能访问/控制它,它总是显示在最上面,不pipe是什么)。 你可以做的最多的是input视图成为/退出第一响应者状态,并且键盘将相应地出现/消失:全部或全部。
你可能会得到一个键盘视图的句柄,并改变它的框架属性(使用logging的类的未logging的属性和未logging的类),但我敢肯定,你会被踢出商店。