Untitled

 avatar
unknown
plain_text
2 years ago
1.9 kB
11
Indexable
import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

  @IBOutlet weak var activeField: UITextField!
  @IBOutlet weak var scrollView: UIScrollView!

  var keyboardHeight: CGFloat = 0.0

  override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
  }

  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    NotificationCenter.default.removeObserver(self)
  }

  @objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
      keyboardHeight = keyboardSize.height
      let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardHeight, right: 0.0)
      scrollView.contentInset = contentInsets
      scrollView.scrollIndicatorInsets = contentInsets
      var aRect = self.view.frame
      aRect.size.height -= keyboardHeight
      if let activeField = self.activeField {
        if (!aRect.contains(activeField.frame.origin)) {
          self.scrollView.scrollRectToVisible(activeField.frame, animated: true)
        }
      }
    }
  }

  @objc func keyboardWillHide(notification: NSNotification) {
    let contentInsets = UIEdgeInsets.zero
    scrollView.contentInset = contentInsets
    scrollView.scrollIndicatorInsets = contentInsets
  }

  func textFieldDidBeginEditing(_ textField: UITextField) {
    activeField = textField
  }

  func textFieldDidEndEditing(_ textField: UITextField) {
    activeField = nil
  }

  func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
  }

}
Editor is loading...