如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“
Posted
技术标签:
【中文标题】如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“【英文标题】:How to disable DatePicker interaction(for selecting date) for one textfield in swift" 【发布时间】:2021-10-22 05:37:18 【问题描述】:我在 fromDateTf 和 toDateTf 文本字段中使用datePicker
。现在我需要禁用 toDateTf 的日期选择器交互(意味着不应选择日期)如果 fromDateTf textfield 文本为空.. 怎么办?
日期选择器
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()
使用上面的代码,我可以为两个文本字段选择日期.. 但是
这里的 fromDateTf.text 是空的,所以想禁用 toDateTf 的日期选择器的交互
我希望用户首先选择 fromdate.. 没有 fromdate 我不想授予选择 todate 的访问权限如何?...请帮助我
编辑:根据下面的答案,如果我在viewDidLoad
中添加该代码,那么toDateTf
一直阻止我显示日期选择器并选择日期
所以我在doneButtonPressed
中添加了该代码,所以在这里我第一次可以显示日期选择器并选择日期.. 但是从第二次开始,如果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()
【问题讨论】:
【参考方案1】:您可以创建一个函数来检查 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 时,它会重新启用另一个。
【讨论】:
以上是关于如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“的主要内容,如果未能解决你的问题,请参考以下文章
Swift 如何在另一个 UITextField 突出显示或具有值时禁用 TextField