Yuan
Yuan

Reputation: 117

Swift 3.0 - Hide keyboard for multiple UItextfield

I have 5 UITextFields, everytime I clicked on the textfield, keyboard appeared. when user touch outside of the textfield, keyboard will hide. However, there is one special textField is for Pop Up. When Pop up appear, the previous textfield couldn't hide the keyboard. How am I gonna hide the keyboard first, and then show the pop up?

func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField == self.customerAddress{
        scrollView.setContentOffset(CGPoint(x: 0,y:5), animated: true)

    }
    else if textField == self.district{
        textField.resignFirstResponder()

        scrollView.setContentOffset(CGPoint(x: 0,y:20), animated: true)

        visualEffectView.isHidden = false
        districtpicker.selectRow(3, inComponent: 0, animated: false)

        self.view.addSubview(districtPopUp)
        districtPopUp.center = self.subView.convert(CGPoint(x:subView.frame.size.width/2,y:subView.frame.size.height/3), to: subView)
        districtPopUp.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)

        UIView.animate(withDuration: 0.4, animations: {
            self.visualEffectView.alpha = 0.5
            self.districtPopUp.alpha = 1
            self.districtPopUp.transform = CGAffineTransform.identity
        })
    }

}


@IBAction func districtPopDismiss(_ sender: UIButton) {
    scrollView.setContentOffset(CGPoint(x: 0,y:-64), animated: true)
    UIView.animate(withDuration: 0.3, animations: {
        self.districtPopUp.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
        self.visualEffectView.alpha = 1
    }) { (success) in
        self.districtPopUp.removeFromSuperview()
    }
    self.visualEffectView.isHidden = true
}


 func textFieldDidEndEditing(_ textField: UITextField) {
    textField.resignFirstResponder()
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    scrollView.setContentOffset(CGPoint(x: 0,y:-64), animated: true)

    textField.resignFirstResponder()

    return true
}


override func viewDidLoad() {
    super.viewDidLoad()
    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(CustomerViewController.hideKeyboard))

    subView.addGestureRecognizer(tapGesture)

    visualEffectView.isHidden = true
    self.customerName.delegate = self
    self.customerAddress.delegate = self
    self.customerContact.delegate = self
    self.customerIC.delegate = self
    self.ticketNumber.delegate = self
    self.latitudeGPS.delegate = self
    self.longitudeGPS.delegate = self
    self.district.delegate = self
    // Do any additional setup after loading the view.
}


func hideKeyboard(){
    scrollView.setContentOffset(CGPoint(x: 0,y:-64), animated: true)

    self.customerName.resignFirstResponder()
    self.customerAddress.resignFirstResponder()
    self.customerContact.resignFirstResponder()
    self.customerIC.resignFirstResponder()
    self.ticketNumber.resignFirstResponder()
    self.latitudeGPS.resignFirstResponder()
    self.longitudeGPS.resignFirstResponder()
    self.district.resignFirstResponder()
}

Upvotes: 0

Views: 1548

Answers (2)

Gowtham Sooryaraj
Gowtham Sooryaraj

Reputation: 3907

Simple and easy for all view controller swift 3+

This code help you to hide keyboard on touch anywhere on viewcontrol

    extension UIViewController {

    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
}

Use below code in your viewDidLoad

self.hideKeyboardWhenTappedAround()

Upvotes: 0

Mr. Hedgehog
Mr. Hedgehog

Reputation: 996

Instead of invoking resignFirstResponder() on each of your textFields you can just invoke view.endEditing(true) and keyboard will hide. Try to invoke this before the logic responsible for presenting the popup.

Upvotes: 1

Related Questions