LoginSignup
0
2

More than 1 year has passed since last update.

FSCalendarの日付をタップしたら、TextFieldを持ったAlertを表示する

Last updated at Posted at 2021-07-24

こんな感じです

79363C2A-0C50-484A-9DC6-CB8C81A8632F_1_201_a.jpeg

コードと簡単説明

  • まずは、表示するAlertを作成します。
  • アラートにTextFieldを表示するには、alert.addTextField(configurationHandler:((UITextField) -> Void)?)を使用します。
Alert
    func showTextFieldAlert(targetView:UIViewController){

        var productNameTextField:UITextField? //Alertに表示したTextField.Textを入れて使います
        var janCodeTextField:UITextField?
        var deadlineDayTextField:UITextField?

        let alert = UIAlertController(title: "データを追加", message:"データを追加する場合は、値を入力して下さい", preferredStyle: .alert)

        alert.addTextField { (alertProductNameTextField:UITextField) in

            alertProductNameTextField.placeholder = "プレスホルダー"
            productNameTextField = alertProductNameTextField) //

        }

        alert.addTextField { (alertJANCodeTextField:UITextField) in

            alertJANCodeTextField.placeholder = "プレスホルダー"
            janCodeTextField = alertJANCodeTextField

        }

        alert.addTextField { (alertDeadlineDayTextField:UITextField) in

            alertDeadlineDayTextField.placeholder = "プレスホルダー"
            deadlineDayTextField = alertDeadlineDayTextField

        }

        alert.addAction(UIAlertAction(title: "キャンセル", style: .default, handler: nil))

        alert.addAction(UIAlertAction(title: "追加", style: .default, handler: { _ in

            //追加が押された時の処理

         }))

        targetView.present(alert, animated: true, completion: nil)

    }
  • FSCalendarで日付のタップを検知するには、func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {}を使用します。
FSCalendar
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {

           //カレンダーの日付がタップされた時に働く処理

     }

実際にアプリで書いたコード

Alert

Alert
extension Alert{   

    func showTextFieldAlert(targetView:UIViewController){

        let realmCRUDModel = RealmCRUDModel()

        var productNameTextField:UITextField?
        var janCodeTextField:UITextField?
        var deadlineDayTextField:UITextField?

        let alert = UIAlertController(title: "データを追加", message:"データを追加する場合は、値を入力して下さい", preferredStyle: .alert)

        alert.addTextField { (alertProductNameTextField:UITextField) in

            alertProductNameTextField.placeholder = "商品名"
            productNameTextField = alertProductNameTextField

        }

        alert.addTextField { (alertJANCodeTextField:UITextField) in

            alertJANCodeTextField.placeholder = "JANコード"
            janCodeTextField = alertJANCodeTextField

        }

        alert.addTextField { (alertDeadlineDayTextField:UITextField) in

            alertDeadlineDayTextField.placeholder = "期限 例:2021年01月01日"
            deadlineDayTextField = alertDeadlineDayTextField

        }

        alert.addAction(UIAlertAction(title: "キャンセル", style: .default, handler: nil))

        alert.addAction(UIAlertAction(title: "追加", style: .default, handler: { _ in

            realmCRUDModel.createRealm(createProductName: (productNameTextField?.text)!, createJANCode: (janCodeTextField?.text)!, createDeadlineDay: (deadlineDayTextField?.text)!)

         }))

        targetView.present(alert, animated: true, completion: nil)

    }

}

FSCalendar

ViewController
    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {

        alert.showTextFieldAlert(targetView: self)

     }

終わり

初めて、TextField入りのAlertを書いた時に
Alert内のTextField.textをどうすれば使えるのか分からなかったのが懐かしい 

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2