I am using datePicker
for fromDateTf and toDateTf textfields.. now i need to make toDateTf's date picker interaction disable(means date shouldn't select) if fromDateTf textfield text is empty.. how?
for datepicker
let screenWidth = UIScreen.main.bounds.width
let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 216))
class PostServiceRequestVC: UIViewController, UITextViewDelegate {
@IBOutlet weak var toDateTf: UITextField!
@IBOutlet weak var fromDateTf: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
fromDateTf.addInputViewDatePicker(target: self, selector: #selector(doneButtonPressed), tag: 0)
toDateTf.addInputViewDatePicker(target: self, selector: #selector(doneButtonPressed), tag: 1)
}
@objc func doneButtonPressed(_ sender: UIBarButtonItem) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let arr = [fromDateTf,toDateTf]
let current = arr[sender.tag]
if let datePicker = current?.inputView as? UIDatePicker {
current?.text = dateFormatter.string(from: datePicker.date)
current?.resignFirstResponder()
}
}
extension UITextField {
func addInputViewDatePicker(target: Any, selector: Selector, tag: Int) {
datePicker.datePickerMode = .date
self.inputView = datePicker
if #available(iOS 13.4, *) {
datePicker.preferredDatePickerStyle = .wheels
datePicker.sizeToFit()
}
let todaysDate = Date()
datePicker.minimumDate = todaysDate
let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 44))
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelPressed))
let doneBarButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector)
toolBar.setItems([cancelBarButton, flexibleSpace, doneBarButton], animated: false)
doneBarButton.tag = tag
self.inputAccessoryView = toolBar
}
@objc func cancelPressed() {
self.resignFirstResponder()
}
}
with the above code i am able to select dates for two textfields.. but
here fromDateTf.text is empty so want to disable interaction for toDateTf's datepicker
i want user should select fromdate first.. without fromdate i do not want to give access to select todate how?... please help me
EDIT: according to below answer if i add that code in viewDidLoad
then all the time toDateTf
stopping me to show datepicker and select date
so i have added that code in doneButtonPressed
so here for the first time i am bale to show datepicker and select date.. but from the 2nd time if the fromDateTf
is empty then working.. but its not working for the 1st time.. for first time also if fromDateTf is empty then toDateTf.isEnabled = false
should work.. how to achieve please do help.
@objc func doneButtonPressed(_ sender: UIBarButtonItem) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let arr = [fromDateTf,toDateTf]
let current = arr[sender.tag]
if let datePicker = current?.inputView as? UIDatePicker {
if fromDateTf.text?.isEmpty ?? true {
toDateTf.isEnabled = false
} else {
toDateTf.isEnabled = true
}
current?.text = dateFormatter.string(from: datePicker.date)
current?.resignFirstResponder()
}
}
You could make a function that checks whether or not the fromDateTf is empty, and adjust the UI accordingly:
func checkForText() {
if fromDateTF.text == "" { //you can also use .isEmpty if you'd rather
toDateTf.isEnabled = false
} else {
toDateTf.isEnabled = true
}
Then, you can call this function in your ViewDidLoad and any subsequent time you change anything with your textboxes. It'll be a good idea to add in the else part of it so that when you fill in your fromDateTf, it reEnables the other one.