Swift 3.0 - скрыть клавиатуру для нескольких текстовых полей пользовательского интерфейса

У меня есть 5 UITextFields, каждый раз, когда я нажимал на текстовое поле, появлялась клавиатура. когда пользователь касается за пределами текстового поля, клавиатура скрывается. Однако есть одно специальное поле textField для всплывающих окон. Когда появляется всплывающее окно, предыдущее текстовое поле не может скрыть клавиатуру. Как мне сначала скрыть клавиатуру, а потом показать всплывающее окно?

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()
}

person Yuan    schedule 17.04.2017    source источник


Ответы (2)


Вместо того, чтобы вызывать resignFirstResponder() для каждого из ваших текстовых полей, вы можете просто вызвать view.endEditing(true), и клавиатура скроется. Попробуйте вызвать это перед логикой, отвечающей за представление всплывающего окна.

person Mr. Hedgehog    schedule 17.04.2017
comment
Привет, да, я пытался просмотреть view.endEditing(true) каждый раз, когда пользователь заканчивал это поле UItext, однако я не мог сначала вызвать view.endEditing(true) заранее, потому что как только я щелкнул новое поле uitext, клавиатура снова появилась . как это решить? - person Yuan; 18.04.2017

Простой и удобный для всех контроллер просмотра Swift 3+

Этот код поможет вам скрыть клавиатуру при касании в любом месте на панели управления.

    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)
    }
}

Используйте приведенный ниже код в своем viewDidLoad

self.hideKeyboardWhenTappedAround()
person Gowtham Sooryaraj    schedule 10.03.2018