[SWIFT] Erstellen Sie zwei DatePicker, die mit TextField verknüpft sind

Einführung

Lassen Sie uns zwei UIDatePicker erstellen und zusammenfassen, wie sie in das TextField eingegeben werden.

Entwicklungsumgebung

macOS Catalina 10.15.7 Xcode 12.1 Swift 5.3

Textfelder einstellen und Variablen vorbereiten

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 einer Methode zum Erstellen eines DatePickers

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

Definition der Methode zum Erkennen einer Änderung von DatePicker

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
 }

Verarbeitung zum Zurückziehen der Tastatur

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)
}

Erstellen Sie DatePicker in ViewDidLoad

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
        
    }

Ganzer Code

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

Erstellen Sie zwei DatePicker, die mit TextField verknüpft sind
Versuchen Sie es mit Trailblazer
Erstellen Sie eine Jar-Datei mit zwei Befehlszeilen
Erstellen Sie eine XML-RPC-API mit Wicket
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie mit Spring Boot einen Mikrodienst