36

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

Apple 是否使用私有 API 来执行此操作,或者有没有办法通过(我认为)手势识别器来控制这样的键盘?

4

8 回答 8

44

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

https://github.com/danielamitay/DAKeyboardControl

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

于 2012-02-19T22:29:53.130 回答
34

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

砰,宝贝!

Acani Chats iPhone Client ChatViewController.swift为例。

于 2014-06-23T05:28:13.303 回答
29

幸运的是,Apple 添加了方便的属性keyboardDismissModeUIScrollView让您的生活更轻松。

现在,您的应用程序可以像 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 属性:

在此处输入图像描述

希望能帮助解决您的问题

于 2016-01-23T14:34:27.007 回答
10

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

关闭 UIScrollView 中的键盘

希望对某人有所帮助。

于 2013-11-29T01:55:26.243 回答
5

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

  1. 创建一个 IBAction:

- (IBAction)dismiss:(id)sender;

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

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

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

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

    - (IBAction)dismiss:(id)sender 
    
    {
    
      [yourTextField resignFirstResponder];
    
    }
    

完毕!

于 2011-08-20T17:46:02.610 回答
1

swift中,您可以使用以下代码获取当前键盘的视图容器(如果存在),而不是您可以在代码中更改 is 的框架:

UIApplication.shared.windows
    .filter{ NSStringFromClass($0.classForCoder) == "UIRemoteKeyboardWindow" }
    .first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetContainerView" }
    .first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetHostView" }
    .first

顺便说一下,这里有一个名为Reveal的工具,您可以看到分层视图。

于 2017-04-20T03:30:44.170 回答
0

简短的回答;他们很可能在那里做一些“私有 API”的事情。

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

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

于 2011-09-29T04:06:37.177 回答
0

我认为最好的方法是在文本输入容器上方放置一个隐藏按钮。一条长条,当它检测到触地并释放或取消时,然后隐藏键盘。

我要试一试,我会告诉你我怎么走的。

于 2011-09-29T00:46:16.163 回答