使用滑动手势关闭键盘(如在消息应用程序中)

时间:2011-08-20 17:38:16

标签: iphone ios uitableview uigesturerecognizer uiresponder

当iPhone的消息应用程序上显示键盘时,如果用户从消息表视图开始向下滑动并继续进入键盘区域,键盘将开始关闭。如果他们在此过程中上下移动手指,键盘会随之移动。

Apple是否使用私有API执行此操作,或者是否有办法从(我假设)手势识别器控制键盘?

8 个答案:

答案 0 :(得分:44)

我创建了一个提供所需功能的UIView类别:

https://github.com/danielamitay/DAKeyboardControl

编辑: 它确实已在app商店中使用过。

答案 1 :(得分:31)

最简单的解决方案是设置以下两个属性:

砰的一声,宝贝!

查看Acani Chats iPhone Client ChatViewController.swift以获取示例。

答案 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属性:

enter image description here

希望有助于解决您的问题

答案 3 :(得分:10)

在iOS 7中,您现在可以在UIScrollView上以交互方式关闭键盘。

Dismissing the keyboard in a UIScrollView

希望能有所帮助。

答案 4 :(得分:5)

您可以使用UISwipeGestureRecognizer执行此操作。我不知道如何使用代码实现它,但如果你使用新的xcode 4.2 beta,那么这是一个简单的方法:

  1. 创建IBAction:
  2. - (IBAction)dismiss:(id)sender;

    1. 转到xib中的视图,并将您查看的类设置为UIControl。

    2. 将UISwipeGestureRecognizer从库拖动并连接到您的视图。

    3. 将IBAction(TouchDown)与UISwipeGestureRecognizer连接。

    4. 编写代码以关闭键盘:

      - (IBAction)dismiss:(id)sender 
      
      {
      
        [yourTextField resignFirstResponder];
      
      }
      
    5. 完成!

答案 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”。

我非常确定键盘位于应用程序窗口上方的独立视图中(您无法访问/控制它,无论如何,它始终显示在顶部)。您可以做的最多就是让输入视图成为/退出第一响应者状态,键盘将相应地显示/消失:全部或全部。

您可以获得键盘视图的句柄并更改其框架属性(使用记录的类和未记录的类的未记录的属性),但我很确定这会让您被踢出商店。