【发布时间】:2020-08-24 11:37:19
【问题描述】:
我想实现一个在设置文本字段和日期选择器时激活按钮的功能。
日期选择器的值转到标签,我通过更改标签值检查了按钮。
但是,在我实现的其他功能中,如果使用单例对象弹出导航并在返回时保存值,如果通过标签更改检查按钮,则不会激活按钮,因为它是与单例重复,或者即使只设置了电话号码。碰巧按钮被激活了。
那么,除了更改标签之外,有没有办法在日期选择器本身更改值时捕获它?
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
感谢阅读!!
【问题讨论】:
标签: ios swift date button datepicker