Swift 3.0 - 隐藏多个UItextfield的键盘

时间:2017-04-17 14:03:36

标签: swift3 popup uitextfield resignfirstresponder

我有5个UITextField,每次我点击文本字段,键盘出现。当用户触摸文本字段外,键盘将隐藏。但是,有一个特殊的textField用于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()
}

2 个答案:

答案 0 :(得分:1)

您可以只调用resignFirstResponder()而不是在每个textField上调用view.endEditing(true),而键盘将隐藏。尝试在负责显示弹出窗口的逻辑之前调用它。

答案 1 :(得分:0)

简单易用的所有视图控制器swift 3 +

此代码可帮助您在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)
    }
}

在viewDidLoad中使用以下代码

self.hideKeyboardWhenTappedAround()