iMessage 风格聊天框后退带键盘
Posted
技术标签:
【中文标题】iMessage 风格聊天框后退带键盘【英文标题】:iMessage style chatbox recede with keyboard 【发布时间】:2014-08-19 17:37:54 【问题描述】:我进行了大量搜索并实现了几个我从类似问题中找到的 sn-ps 代码。
我已经回答了几个类似这样的问题:iMessage Style Receding Keyboard in an ios App
设置后退键盘。这完美!我可以向下滚动,一旦我的手指碰到键盘,它就会开始向下滑动,直到我松开它然后它就会从屏幕上弹出。现在我的问题是让键盘正上方的UITextView
像在 iMessage 中一样工作。我想要的是一旦我的手指碰到 UITextView 的顶部,或者我的消息写入的地方也开始滑动。
DaKeyboardControl 在 iOS 8 上已损坏,因此无法选择,我不希望使用第三方自定义 API。
我的问题再次是,一旦我的手指碰到 textView,如何让键盘和 textview(用于输入您的信息)向下滑动。现在我的手指滑过 textView,然后一旦它碰到键盘它就开始滑落。我不希望我的手指在它开始滑动之前通过 textView。这是我正在谈论的视频: http://d.pr/v/8Pa6
【问题讨论】:
查看消息应用程序,您指的是什么UITextView
应该从屏幕上滑出?
@Stonz2 在我的应用程序中,我在发送按钮旁边有一个带有约束的 UITextView,不完全确定它是如何在消息应用程序中设置的,但我指的是包含的视图您在发送按钮旁边输入的文本。消息应用程序中的向下滑动手势与该 textView 以及键盘交互,我的则没有。只有键盘
这是我正在查看的示例d.pr/v/8Pa6
那么,您的意思是希望键盘和UITextView
在触摸到达UITextView
的顶部时开始向下滑动,而不是等到触摸到达键盘?
没错,这就是我想要的
【参考方案1】:
假设您已按照问题中的链接教程进行操作。我将在代码中将包含UITextView
和“发送”按钮的视图简单地称为textView
。
您需要将textView
的框架包括在计算触摸发生的位置以及需要移动的时间。另外,保留一个previousY
的实例变量,它将保存触摸移动位置的y
坐标。
在touchesMoved
方法中:
...
//updateY = keyboardSuperView.frame.origin.y;
if (point.y < keyboardSuperFrame.origin.y - textView.frame.size.height)
return;
//if(point.y < previousY || point.y > previousY)
//
// previousY = point.y;
updateY = point.y + textView.frame.size.height;
//
...
如果您对此有任何问题,请告诉我,因为我实际上没有测试任何东西。
编辑:正如@Sam 引起我注意的那样,我拥有的第二个if
条件是非常不必要的。不管y
val 是否改变,第三个if
(未显示)仍然只有在y
val 改变而没有第二个if
的情况下才会触发。只需要设置updateY
即可。
【讨论】:
第二个条件是否必要? 它(在某种程度上)在大局中。只有当 y 值发生变化时,键盘框架才会发生变化。通过检查未显示的第三个条件中更新的y
val,您可以避免无意义的帧更改。
@Sam 仔细考虑之后,我意识到您仍然是对的。相应地更新了帖子。以上是关于iMessage 风格聊天框后退带键盘的主要内容,如果未能解决你的问题,请参考以下文章