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