2017-01-26 3 views
0

textFieldShouldBeginEditingを実装して、一部のテキストフィールドのダイアログボックスでポップアップを表示し、その他はフリーテキストであるようにします。textFieldShouldBeginEditingすべてのテキストフィールドで発生するフィールド

私はそのようにそれを実装:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{ 


    if(textField == self.petType) 
    { 
     petTypePicker = CZPickerView(headerTitle: "Pet Types", cancelButtonTitle: "Cancel", confirmButtonTitle: "Choose") 
     petTypePicker?.delegate = self 
     petTypePicker?.dataSource = self 
     petTypePicker?.needFooterView = true 
     petTypePicker?.headerBackgroundColor = #colorLiteral(red: 0.4509803922, green: 0.3529411765, blue: 0.7647058824, alpha: 1) 
     petTypePicker?.confirmButtonBackgroundColor = #colorLiteral(red: 0.4509803922, green: 0.3529411765, blue: 0.7647058824, alpha: 1) 
     petTypePicker?.show() 
     return false 
    } 
    else if(textField == self.petBread) 
    { 
     breedPicker = CZPickerView(headerTitle: "Breeds", cancelButtonTitle: "Cancel", confirmButtonTitle: "Choose") 
     breedPicker?.headerBackgroundColor = #colorLiteral(red: 0.4509803922, green: 0.3529411765, blue: 0.7647058824, alpha: 1) 
     breedPicker?.confirmButtonBackgroundColor = #colorLiteral(red: 0.4509803922, green: 0.3529411765, blue: 0.7647058824, alpha: 1) 
     breedPicker?.delegate = self 
     breedPicker?.dataSource = self 
     breedPicker?.needFooterView = true 
     breedPicker?.show() 
     return false 
    } 
    else if(textField == self.petColor){ 
     colourPicker = CZPickerView(headerTitle: "Colours", cancelButtonTitle: "Cancel", confirmButtonTitle: "Choose") 
     colourPicker?.headerBackgroundColor = #colorLiteral(red: 0.4509803922, green: 0.3529411765, blue: 0.7647058824, alpha: 1) 
     colourPicker?.confirmButtonBackgroundColor = #colorLiteral(red: 0.4509803922, green: 0.3529411765, blue: 0.7647058824, alpha: 1) 
     colourPicker?.delegate = self 
     colourPicker?.dataSource = self 
     colourPicker?.needFooterView = true 
     colourPicker?.show() 
     return false 
    } 
    else if(textField == self.petDateOfBirth){ 

     let currentDate = Date() 

     DatePickerDialog().show(title: "DatePickerDialog", doneButtonTitle: "Done", cancelButtonTitle: "Cancel", minimumDate: nil, maximumDate: currentDate, datePickerMode: .date) { (date) in 
      if let dt = date { 
       let dateFormatter = DateFormatter() 

       dateFormatter.dateStyle = .medium 

       self.petDateOfBirth.text = "\(dateFormatter.string(from: dt) as String)" 
      } 
     } 

     return false 
    } 
    else{ 


     return true 

    } 

} 

しかし、これは何が起こるかである何らかの理由:

リターンがfalseの場合、リターンが真であるとき、それは、完璧に動作し、それは方法を発射textFieldShouldBeginEditingをすべてのtexフィールドに適用すると、それらはすべてifステートメントに入り、すべてのダイアログを起動します。

私はこの振る舞いを経験していますなぜ任意のアイデアは、すべてのフィールドがスタックビュー内にあることに注意してください

はあなた

+0

インスタンスプロパティisFirstResponder()を使用しようとします。 if文をif textField == self.petTypeからif(self.petType.isFirstResponder())に変更します。 – webjunkie

+0

@webjunkieありがとうございました!私はすべての条件にtextField.isFirstResponder()をANDEDしてくれました。ありがとうございました。正解にするために答えとして追加してください。 –

答えて

0

私はそれが働いてうれしいありがとう;)。

インスタンスプロパティーisFirstResponder()を使用して、正しいtextFieldをクリックしていないかどうかを確認します。あなたのケースでは、if self.petType.isFirstResponder()にifステートメントを変更すると、そのトリックを行います。

関連する問題