Кнопка активируется, когда средство выбора даты и текстовое поле установлены в Swift

#ios #swift #date #button #datepicker

#iOS #swift #Дата #кнопка #средство выбора даты

Вопрос:

Я хочу реализовать функцию, которая активирует кнопку, когда текстовое поле и средство выбора даты установлены.

Значение средства выбора даты переходит к метке, и я проверил кнопку, изменив значение метки.

Однако, среди других функций, которые я реализовал, если навигация запускается с использованием одноэлементного объекта и значение сохраняется при его возврате, если кнопка отмечена изменением метки, кнопка не активируется, потому что она дублируется с помощью одноэлементного объекта, или даже если установлен только номер телефона. Случается, что кнопка активируется.

Итак, вместо изменения метки, есть ли способ перехватить ее, когда само средство выбора даты изменяет значение?

 import UIKit

class ThirdViewController: UIViewController {
    
    lazy var dateFormatter: DateFormatter = {
        let date = DateFormatter()
        date.dateStyle = .medium
        date.timeStyle = .none
        return date
    }()
    
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var numberTextField: UITextField!
    @IBOutlet weak var datePicker: UIDatePicker!
    @IBOutlet weak var signUpButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        numberTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
        numberTextField.text = UserInformation.userInformationSingleton.userNumber
        dateLabel.text = UserInformation.userInformationSingleton.dateLabel
    }
    
    @objc func editingChanged(_ textField: UITextField) {
        if textField.text?.count == 1 {
            if textField.text?.first == " " {
                textField.text = ""
                return
            }
        }
        toggleButton()
    }
    
    func toggleButton() {
        guard
            let textField = numberTextField.text, !textField.isEmpty,
            dateLabel.text != ""
            else {
                signUpButton.isEnabled = false
                return
        }
        signUpButton.isEnabled = true
    }
    
    @IBAction func datePickerValueChanged(_ sender: UIDatePicker) {
        dateLabel.text = dateFormatter.string(from: sender.date)
        toggleButton()
    }
    
    @IBAction func cancelButton(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
        UserInformation.userInformationSingleton.userID = nil
        UserInformation.userInformationSingleton.userNumber = nil
        UserInformation.userInformationSingleton.dateLabel = nil
    }
    
    @IBAction func tappedPreviousButton(_ sender: UIButton) {
        self.navigationController?.popViewController(animated: true)
    }
    
    @IBAction func tappedSignUpButton(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
    }
}


  

https://i.stack.imgur.com/a1GVc.png

спасибо за чтение!!

Ответ №1:

решена проблема!

 func toggleButton() {
        guard
            let textField = numberTextField.text, !textField.isEmpty,
            let label = dateLabel.text, !label.isEmpty
            else {
                signUpButton.isEnabled = false
                return
        }
        signUpButton.isEnabled = true
    }