Créons deux UIDatePickers et résumons comment les entrer dans TextField.
macOS Catalina 10.15.7 Xcode 12.1 Swift 5.3
Tout d'abord, placez deux champs de texte n'importe où sur le StoryBoard. Cette fois, le premier champ de texte est ATextField et le second est BTextField.
Préparez également les deux variables suivantes.
ViewController.swift
class ViewController: UIViewController {
@IBOutlet weak var ATextField: UITextField!
@IBOutlet weak var BTextFiled: UITextField!
var APicker: UIDatePicker!
var BPicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
}
}
Ensuite, définissez une méthode pour créer un DatePicker à placer dans le TextField.
ViewController.swift
func makePicker(_ isA:Bool) -> UIDatePicker {
let myPicker:UIDatePicker!
myPicker = UIDatePicker()
myPicker.tag = isA ? 1 : 2
myPicker.datePickerMode = .date
myPicker.locale = NSLocale(localeIdentifier: "ja_JP") as Locale
myPicker.preferredDatePickerStyle = .wheels
return myPicker
}
Puisqu'il y a deux DatePickers à créer, prenez true ou false comme argument, et si true, un DatePicker à insérer dans ATextField sera créé, et si false, un DatePicker à insérer dans BTextFiled sera créé.
Mettez les balises 1 et 2 sur chaque DatePicker. Vous pouvez définir librement le DatePicker dans cette méthode.
J'ai fait référence à cet article sur le comportement de DatePicker sur iOS14. →https://qiita.com/kj_trsm/items/a53b0b3f7e1bc7c06106
Définit une méthode qui affiche la date saisie lorsque le DatePicker est manipulé par l'utilisateur dans un champ de texte.
ViewController.swift
@objc internal func dateChanged(sender: UIDatePicker){
let formatter: DateFormatter = DateFormatter()
formatter.dateFormat = "aaaa année M mois j jour"
let selectedDate = formatter.string(from: sender.date)
if sender.tag == 1 {
ATextField.text = selectedDate
} else {
BTextFiled.text = selectedDate
}
}
Tout d'abord, préparez un DateFormatter qui convertit le type Date en type String, stockez la chaîne de caractères convertie dans la variable selectedDate, puis affectez la chaîne de caractères au champ de texte de destination d'entrée en fonction de la balise de l'expéditeur.
Une fois que vous avez fait cela, ajoutezTarget à myPicker dans la méthode makePicker que vous avez définie précédemment.
ViewController.swift
func makePicker(_ isA:Bool) -> UIDatePicker {
let myPicker:UIDatePicker!
myPicker = UIDatePicker()
myPicker.tag = isA ? 1 : 2
myPicker.datePickerMode = .date
myPicker.locale = NSLocale(localeIdentifier: "ja_JP") as Locale
myPicker.preferredDatePickerStyle = .wheels
//ici
myPicker.addTarget(self, action: #selector(onDidChangeDate(sender:)), for: .valueChanged)
return myPicker
}
À ce rythme, le clavier sera laissé sans surveillance lorsque vous commencerez à utiliser DatePicker. Lorsque vous appuyez en dehors du clavier, le clavier se rétracte.
ViewController.swift
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
ATextField.endEditing(true)
BTextFiled.endEditing(true)
}
Enfin, appelez la méthode qui crée le DatePicker dans ViewDidLoad et saisissez-le dans le champ de texte pour terminer.
ViewContoller.swift
override func viewDidLoad() {
super.viewDidLoad()
APicker = makePicker(true)
ATextField.inputView = APicker
BPicker = makePicker(false)
BTextFiled.inputView = BPicker
}
ViewCOntroller.swift
class ViewController: UIViewController {
@IBOutlet weak var ATextField: UITextField!
@IBOutlet weak var BTextFiled: UITextField!
var APicker: UIDatePicker!
var BPicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
APicker = makePicker(true)
ATextField.inputView = APicker
BPicker = makePicker(false)
BTextFiled.inputView = BPicker
}
func makePicker(_ isA:Bool) -> UIDatePicker {
let myPicker:UIDatePicker!
myPicker = UIDatePicker()
myPicker.tag = isA ? 1 : 2
myPicker.datePickerMode = .date
myPicker.locale = NSLocale(localeIdentifier: "ja_JP") as Locale
myPicker.preferredDatePickerStyle = .wheels
myPicker.addTarget(self, action: #selector(onDidChangeDate(sender:)), for: .valueChanged)
return myPicker
}
@objc internal func onDidChangeDate(sender: UIDatePicker){
let formatter: DateFormatter = DateFormatter()
formatter.dateFormat = "aaaa année M mois j jour"
let mySelectedDate = formatter.string(from: sender.date)
if sender.tag == 1 {
ATextField.text = mySelectedDate
} else {
BTextFiled.text = mySelectedDate
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
ATextField.endEditing(true)
BTextFiled.endEditing(true)
}
}