Lassen Sie uns zwei UIDatePicker erstellen und zusammenfassen, wie sie in das TextField eingegeben werden.
macOS Catalina 10.15.7 Xcode 12.1 Swift 5.3
Platzieren Sie zunächst zwei Textfelder an einer beliebigen Stelle im StoryBoard. Dieses Mal ist das erste Textfeld ATextField und das zweite BTextField.
Bereiten Sie außerdem die folgenden zwei Variablen vor.
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()
}
}
Definieren Sie als Nächstes eine Methode zum Erstellen eines DatePickers, der in das TextField eingefügt werden soll.
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
}
Da zwei DatePicker erstellt werden müssen, nehmen Sie true oder false als Argument. Wenn true, wird ein DatePicker erstellt, der in ATextField eingefügt werden soll. Wenn false, wird ein DatePicker erstellt, der in BTextFiled eingefügt werden soll.
Setzen Sie die Tags 1 und 2 auf jeden DatePicker. Sie können den DatePicker in dieser Methode frei einstellen.
Ich habe auf diesen Artikel über das Verhalten von DatePicker unter iOS14 verwiesen. →https://qiita.com/kj_trsm/items/a53b0b3f7e1bc7c06106
Definiert eine Methode, die das eingegebene Datum anzeigt, wenn der DatePicker vom Benutzer in einem Textfeld bearbeitet wird.
ViewController.swift
@objc internal func dateChanged(sender: UIDatePicker){
let formatter: DateFormatter = DateFormatter()
formatter.dateFormat = "JJJJ Jahr M Monat d Tag"
let selectedDate = formatter.string(from: sender.date)
if sender.tag == 1 {
ATextField.text = selectedDate
} else {
BTextFiled.text = selectedDate
}
}
Bereiten Sie zunächst einen DateFormatter vor, der den Datumstyp in den Zeichenfolgentyp konvertiert, speichern Sie die konvertierte Zeichenfolge in der Variablen selectedDate und weisen Sie die Zeichenfolge dann dem Eingabezieltextfeld gemäß dem Absender-Tag zu.
Sobald Sie dies getan haben, fügen Sie myPicker in der zuvor definierten makePicker-Methode addTarget hinzu.
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
//Hier
myPicker.addTarget(self, action: #selector(onDidChangeDate(sender:)), for: .valueChanged)
return myPicker
}
Bei dieser Geschwindigkeit bleibt die Tastatur unbeaufsichtigt, wenn Sie DatePicker in Betrieb nehmen. Wenn Sie außerhalb der Tastatur tippen, wird die Tastatur eingefahren.
ViewController.swift
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
ATextField.endEditing(true)
BTextFiled.endEditing(true)
}
Rufen Sie abschließend die Methode auf, mit der der DatePicker in ViewDidLoad erstellt wird, und geben Sie ihn zum Ausfüllen in das Textfeld ein.
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 = "JJJJ Jahr M Monat d Tag"
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)
}
}
Recommended Posts