Swift 3.0 - 隐藏多个UItextfield的键盘

问题描述:

我有5个UITextFields,每当我点击文本框时,键盘出现。当用户触摸文本字段外时,键盘将隐藏。但是,有一个特殊的textField用于弹出窗口。当出现弹出窗口时,以前的文本框无法隐藏键盘。我该如何隐藏键盘,然后显示弹出窗口?Swift 3.0 - 隐藏多个UItextfield的键盘

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

而是在每个文本框的调用resignFirstResponder()的你可以调用view.endEditing(true)和键盘将隐藏。尝试在负责呈现弹出窗口的逻辑之前调用它。

+0

喜,是的,每次用户结束UItextfield时,我都尝试过view.endEditing(true),但是,我无法事先调用view.endEditing(true),因为一旦我点击了新的uitextfield,键盘应用程序再次听到。如何解决这个问题? – Yuan

简易所有视图控制器迅速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()