如何为 swift 中的一个文本字段禁用 DatePicker 交互(用于选择日期)”
How to disable DatePicker interaction(for selecting date) for one textfield in swift"
我正在为 fromDateTf 和 toDateTf 文本字段使用 datePicker
.. 现在我需要禁用 toDateTf 的日期选择器交互(意味着日期不应该 select)如果 fromDateTf 文本字段文本为空..怎么办?
对于日期选择器
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()
}
}
使用上面的代码我可以select两个文本字段的日期..但是
这里 fromDateTf.text 是空的所以想禁用 toDateTf 的日期选择器的交互
我希望用户应该先select fromdate..没有fromdate我不想给select todate访问权限怎么办?...请帮帮我
编辑: 根据下面的回答,如果我在 viewDidLoad
中添加该代码,那么一直 toDateTf
阻止我显示日期选择器和 select日期
所以我在 doneButtonPressed
中添加了该代码,所以我第一次在这里显示日期选择器和 select 日期..但是如果 fromDateTf
从第二次开始是空的然后工作..但它第一次不工作..也是第一次如果fromDateTf是空的那么toDateTf.isEnabled = false
应该工作..如何实现请帮助。
@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()
}
}
您可以创建一个函数来检查 fromDateTf 是否为空,并相应地调整 UI:
func checkForText() {
if fromDateTF.text == "" { //you can also use .isEmpty if you'd rather
toDateTf.isEnabled = false
} else {
toDateTf.isEnabled = true
}
然后,您可以在您的 ViewDidLoad 中调用此函数,并且随后您可以随时更改文本框的任何内容。添加它的 else 部分是个好主意,这样当您填写 fromDateTf 时,它会重新启用另一个。
我正在为 fromDateTf 和 toDateTf 文本字段使用 datePicker
.. 现在我需要禁用 toDateTf 的日期选择器交互(意味着日期不应该 select)如果 fromDateTf 文本字段文本为空..怎么办?
对于日期选择器
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()
}
}
使用上面的代码我可以select两个文本字段的日期..但是
这里 fromDateTf.text 是空的所以想禁用 toDateTf 的日期选择器的交互
我希望用户应该先select fromdate..没有fromdate我不想给select todate访问权限怎么办?...请帮帮我
编辑: 根据下面的回答,如果我在 viewDidLoad
中添加该代码,那么一直 toDateTf
阻止我显示日期选择器和 select日期
所以我在 doneButtonPressed
中添加了该代码,所以我第一次在这里显示日期选择器和 select 日期..但是如果 fromDateTf
从第二次开始是空的然后工作..但它第一次不工作..也是第一次如果fromDateTf是空的那么toDateTf.isEnabled = false
应该工作..如何实现请帮助。
@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()
}
}
您可以创建一个函数来检查 fromDateTf 是否为空,并相应地调整 UI:
func checkForText() {
if fromDateTF.text == "" { //you can also use .isEmpty if you'd rather
toDateTf.isEnabled = false
} else {
toDateTf.isEnabled = true
}
然后,您可以在您的 ViewDidLoad 中调用此函数,并且随后您可以随时更改文本框的任何内容。添加它的 else 部分是个好主意,这样当您填写 fromDateTf 时,它会重新启用另一个。