iOS交互式键盘显示
在Facebook Messenger for iOS上,如果键盘被隐藏,如果你向上滑动,键盘就会显示出来。它的工作方式与交互式键盘模式完全相反:当您以向上滑动的速度向上滑动时,键盘会显示自己 有人对如何做到这一点有什么建议吗iOS交互式键盘显示,ios,keyboard,Ios,Keyboard,在Facebook Messenger for iOS上,如果键盘被隐藏,如果你向上滑动,键盘就会显示出来。它的工作方式与交互式键盘模式完全相反:当您以向上滑动的速度向上滑动时,键盘会显示自己 有人对如何做到这一点有什么建议吗 编辑:谢谢你的回答!我主要是研究是否有一种内置的方式来实现这一点,因为我在Facebook Messenger中看到了这一点。然而,我刚刚读到一篇博文,他们说他们必须截图系统键盘才能获得效果,所以我假设没有内置的方法来实现这一点!正如在评论中提到的,我正在使用一个自定义键
编辑:谢谢你的回答!我主要是研究是否有一种内置的方式来实现这一点,因为我在Facebook Messenger中看到了这一点。然而,我刚刚读到一篇博文,他们说他们必须截图系统键盘才能获得效果,所以我假设没有内置的方法来实现这一点!正如在评论中提到的,我正在使用一个自定义键盘,所以这应该会容易得多,因为我可以控制框架 基本上,您需要UIPangestureRecognitor
这是一个对我有用的实现。它不是完美的,但它工作得相当好,并且易于实现。您将需要一个集合视图或表视图 为了简单起见,我将只显示此功能所需的代码。因此,请处理视图初始化所需的所有其他内容
class ViewController: UIViewController {
var collectionView: UICollectionView!
var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.panGestureRecognizer.addTarget(self, action: #selector(handlePan(_:)))
collectionView.keyboardDismissMode = .interactive
// Only necessary for empty collectionView
collectionView.alwaysBounceVertical = true
}
func handlePan(_ sender: UIPanGestureRecognizer) {
if sender.state == .changed {
let translation = sender.translation(in: view)
if translation.y < 0 && collectionView.isAtBottom && !self.textView.isFirstResponder() {
self.textView.becomeFirstResponder()
}
}
}
}
extension UIScrollView {
var isAtBottom: Bool {
return contentOffset.y >= verticalOffsetForBottom
}
var verticalOffsetForBottom: CGFloat {
let scrollViewHeight = bounds.height
let scrollContentSizeHeight = contentSize.height
let bottomInset = contentInset.bottom
let scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight
return scrollViewBottomOffset
}
}
类ViewController:UIViewController{
var collectionView:UICollectionView!
var textView:UITextView!
重写func viewDidLoad(){
super.viewDidLoad()
collectionView.panGestureRecognizer.addTarget(self,action:#选择器(handlePan(:))
collectionView.keyboardDismissMode=.interactive
//仅空collectionView需要
collectionView.alwaysBounceVertical=true
}
func handlePan(uu发送方:UIPangestureRecognitizer){
如果sender.state==.changed{
let translation=sender.translation(在:视图中)
如果translation.y<0&&collectionView.isAtBottom&&!self.textView.isFirstResponder(){
self.textView.becomeFirstResponder()
}
}
}
}
扩展UIScrollView{
var isAtBottom:Bool{
return contentOffset.y>=verticalOffsetForBottom
}
var verticalOffsetForBottom:CGFloat{
让scrollViewHeight=bounds.height
让scrollContentSizeHeight=contentSize.height
让bottomInset=contentInset.bottom
让scrollViewBottomOffset=scrollContentSizeHeight+bottomInset-scrollViewHeight
返回滚动视图底部偏移量
}
}
Hm,例如,您可以尝试设置向上/向下滑动的手势识别器,并使textfield firstResponder在滑动时从底部显示键盘或设置自定义输入视图的动画。你已经试过实现它了吗?我正在尝试从底部显示键盘动画。没有人尝试实现它——我不确定如何控制键盘的位置。它是一个自定义键盘或本机iOS kb?它实际上是一个自定义键盘,这可能会有所帮助!
class ViewController: UIViewController {
var collectionView: UICollectionView!
var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.panGestureRecognizer.addTarget(self, action: #selector(handlePan(_:)))
collectionView.keyboardDismissMode = .interactive
// Only necessary for empty collectionView
collectionView.alwaysBounceVertical = true
}
func handlePan(_ sender: UIPanGestureRecognizer) {
if sender.state == .changed {
let translation = sender.translation(in: view)
if translation.y < 0 && collectionView.isAtBottom && !self.textView.isFirstResponder() {
self.textView.becomeFirstResponder()
}
}
}
}
extension UIScrollView {
var isAtBottom: Bool {
return contentOffset.y >= verticalOffsetForBottom
}
var verticalOffsetForBottom: CGFloat {
let scrollViewHeight = bounds.height
let scrollContentSizeHeight = contentSize.height
let bottomInset = contentInset.bottom
let scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight
return scrollViewBottomOffset
}
}