在聊天视图中管理键盘

时间:2018-07-29 12:56:14

标签: ios swift uikeyboard

我有一个像聊天视图这样的控制器,具有一个文本字段以及按钮和表格视图。我想当用户点击文本框文本框时向上滚动并滚动到列表末尾。有我的代码:

@objc func keyboardWillChangeFrame(_ notification: Notification) {

    let keyboardFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue

    print("*****************")
    print((keyboardFrame?.height)!)
     //emoji keyboard size is 258 
    if (keyboardFrame?.height)! == 258 {
      textBackViewBottom.constant =  52
    }
    else {
      textBackViewBottom.constant =  10
    }
    }

  @objc func keyboardWillShow(_ notification: Notification) {
    // Check for double invocation
    if _keyboardShown {
      return
    }
    _keyboardShown = true
    // Reducing size of table
    let baseView = self.view
    let keyboardFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameBeginUserInfoKey]! as AnyObject).cgRectValue
    print("////////////////////")
    print((keyboardFrame?.height)!)
    let keyboardDuration = ((notification as NSNotification).userInfo![UIKeyboardAnimationDurationUserInfoKey]! as AnyObject).doubleValue
    let visibleRows = tableView.indexPathsForVisibleRows
    var lastIndexPath : IndexPath? = nil
    if (visibleRows != nil) && visibleRows!.count > 0 {
      lastIndexPath = visibleRows![visibleRows!.count-1] as IndexPath
    }
    UIView.animate(withDuration: keyboardDuration!, delay: 0.0, options: UIViewAnimationOptions.curveEaseOut, animations: {
      baseView!.frame = CGRect(x: baseView!.frame.origin.x, y: baseView!.frame.origin.y, width: baseView!.frame.size.width, height: baseView!.frame.size.height - (keyboardFrame?.size.height)!)
    }, completion: {
      (finished: Bool) in
      if lastIndexPath != nil {
        // Scroll down the table so that the last
        // visible row remains visible
        self.tableView.scrollToRow(at: lastIndexPath!, at: UITableViewScrollPosition.bottom, animated: true)
      }
    })
  }

  @objc func keyboardWillHide(_ notification: Notification) {

    // Check for double invocation
    if !_keyboardShown {
      return
    }
    _keyboardShown = false
    // Expanding size of table
    //
    let baseView = self.view

    let keyboardFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameBeginUserInfoKey]! as AnyObject).cgRectValue
    let keyboardDuration = ((notification as NSNotification).userInfo![UIKeyboardAnimationDurationUserInfoKey]! as AnyObject).doubleValue
    UIView.animate(withDuration: keyboardDuration!, delay: 0.0, options: UIViewAnimationOptions.curveEaseOut, animations: {
      baseView!.frame = CGRect(x: baseView!.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: self.view.frame.size.height + (keyboardFrame?.size.height)!)
    }, completion: nil)
  }

一切都可以在Iphone默认键盘上正常工作,但是当我使用自定义键盘(如Swiftkey)时,我的代码是错误的,并且视图损坏了。 键盘大小和键盘类型更改时如何获取更新视图。 谢谢您的回复。

0 个答案:

没有答案