2017-04-17 10 views
0

텍스트 필드를 클릭 할 때마다 5 개의 UITextField가 있습니다. 키보드가 나타납니다. 사용자가 텍스트 필드 외부를 터치하면 키보드가 숨겨집니다. 그러나 Pop Up을위한 특별한 textField가 있습니다. 팝업이 나타나면 이전 텍스트 필드가 키보드를 숨길 수 없습니다. 먼저 키보드를 숨기고 팝업을 표시 하시겠습니까?스위프트 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() 
} 

답변

0

하는 대신 텍스트 필드의 각 resignFirstResponder()를 호출하는 당신은 view.endEditing(true)를 호출 할 수 있습니다와 키보드 숨 깁니다. 팝업을 표시하는 논리 앞에이 함수를 호출하십시오. 빠른 모든 뷰 컨트롤러 어디서든 viewcontrol에 터치 키보드를 숨길 3+

이 코드 도움을 간단하고 쉽게

+0

하이 코드 아래

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

사용 , 예, 전 view.endEditing (true) 사용자가 UItextfield를 끝낼 때마다, 그러나, 내가 uitextfield를 새로 클릭했기 때문에 view.endEditing (true)를 먼저 호출 할 수 없었습니다. 키보드 app 다시 귀를 낳았다. 어떻게 해결할 수 있을까요? – Yuan

0

당신의 viewDidLoad

self.hideKeyboardWhenTappedAround()