在 iOS Swift 中使用键盘平移手势处理文本输入视图移动

Posted

技术标签:

【中文标题】在 iOS Swift 中使用键盘平移手势处理文本输入视图移动【英文标题】:Handle text input view movement with keyboard pan gesture in iOS Swift 【发布时间】:2017-09-26 15:54:55 【问题描述】:

我正在开发一个 ios 应用,并且 我有一个消息视图,我想在其中处理这种情况: -> 我在视图底部有一个输入视图,它需要一直可见,除了一些用户被阻止/限制发送消息的标准。 -> 当输入视图聚焦时,键盘出现,我想将视图与键盘框架一起移动。 -> 我希望键盘通过表格视图滚动以交互方式关闭。话虽如此,视图应该响应键盘平移手势并随之移动 -> 我尝试使用输入附件视图,但问题是当键盘被表格视图滚动解除时,输入视图也被解除。 -> 我也尝试使用 willShow/willHide/willChangeFrame 观察者,但是这样,响应不是重点,它不会响应键盘交互解除。 有没有人解决这个问题... 感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

Swift 3+: 我已经查看了 textview 背景并设置了视图的约束(前导、尾随、底部、固定高度)。为底部约束创建一个@IBOutlet 并管理以下代码:

class ViewController: UIViewController 

    @IBOutlet var bottomConstraint: NSLayoutConstraint!
    @IBOutlet var view_TextViewBg: UIView!

    override func viewDidLoad() 
        super.viewDidLoad()

        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardDidShow(_:)),
            name: NSNotification.Name.UIKeyboardWillShow,
            object: nil)
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardDidHide(_:)),
            name: NSNotification.Name.UIKeyboardWillHide,
            object: nil)

        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
        //  tap.delegate = self
        view.addGestureRecognizer(tap)

    
    func handleTap(sender: UITapGestureRecognizer? = nil) 
        //dissmiss your keyboard here
    

    //MARK: Keyboard show

    func keyboardDidShow(_ notification: Notification) 
        let params = notification.userInfo
        let rect: CGRect? = (params?[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue
        bottomConstraint.constant = (rect?.size.height)!
    

    //MARK: Keyboard hide

    func keyboardDidHide(_ notification: Notification) 
        bottomConstraint.constant = 0
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

【讨论】:

以上是关于在 iOS Swift 中使用键盘平移手势处理文本输入视图移动的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 上的应该开始和处理程序(状态开始)之间重置平移手势翻译

如何检测哪个视图正在平移手势 Swift

iOS:啥速度阈值使平移手势成为轻弹?

IOS – 在 Swift 中处理 OnetimeCode

Swift:当定时器触发时,如何阻止平移手势取消?

视图的图像在 iOS Swift 中不会相互碰撞?