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ステートメントに入り、すべてのダイアログを起動します。
私はこの振る舞いを経験していますなぜ任意のアイデアは、すべてのフィールドがスタックビュー内にあることに注意してください
はあなた
インスタンスプロパティisFirstResponder()を使用しようとします。 if文をif textField == self.petTypeからif(self.petType.isFirstResponder())に変更します。 – webjunkie
@webjunkieありがとうございました!私はすべての条件にtextField.isFirstResponder()をANDEDしてくれました。ありがとうございました。正解にするために答えとして追加してください。 –