gpt4 book ai didi

ios - 在 Swift 中禁用选定日期的 TextField 中的选择

转载 作者:行者123 更新时间:2023-11-28 07:55:48 25 4
gpt4 key购买 nike

我刚开始学习 iOS 开发,这里我想显示一个 datePicker 并从用户那里获取日期,但我不知道如何从屏幕底部显示一个 DataPicker。经过查找,我发现:dataPicker可以被一个textField激活,只需通过“myTextField.inputView = myDatepicker”即可。我这样做了,但我遇到了问题:

  1. 激活日期选择器后,用户可以剪切、粘贴文本字段中显示的日期。有什么方法可以禁用文本字段中的内容选择以及编辑菜单吗?

  2. 如果我想使用 UIButton/UILabel/cell 来激活 dataPicker,而不是使用 textField,我该怎么做?(我的意思是如何从底部显示 DatePicker。我找到了 UIButton/UILabel/cell 没有像 textField 那样的方法 .inputView)

它可能很简单,但真的让我很困惑,这是我尝试做的第一个应用程序。非常感谢任何帮助,尤其是在 Swift 中的帮助。非常感谢。

最佳答案

方式一

使用按钮显示日期和按钮显示/隐藏嵌入在 View 中的日期选择器。

class ViewController: UIViewController {    @IBOutlet weak var dateLabel: UILabel!    @IBOutlet weak var datePicker: UIDatePicker!    @IBOutlet weak var chooseDate: UIButton!    @IBAction func toggleDatePicker(_ sender: Any) {        datePicker.isHidden = !datePicker.isHidden    }    override func viewDidLoad() {        dateLabel.text = stringFrom(date: Date())        datePicker.isHidden = true    }}
extension ViewController: UIPickerViewDelegate {    @IBAction func valueChanged() {        dateLabel.text = stringFrom(date: datePicker.date)    }    private func stringFrom(date: Date) -> String {        let dateFormatter = DateFormatter()        dateFormatter.dateFormat = "dd-MM-yyyy"        return dateFormatter.string(from: datePicker.date)    }}

方式二

使用一个按钮显示日期和一个按钮从底部显示/隐藏日期选择器。

只需使用我编写的以下协议(protocol):

protocol DatePickable: class {    var textField: UITextField { get }    var datePicker: UIDatePicker { get }    var isDatePickerVisible: Bool { get set }}extension DatePickable {    func prepareDatePickerFor(view: UIView, onChangeAction: Selector) {        datePicker.datePickerMode = UIDatePickerMode.date        datePicker.addTarget(self, action: onChangeAction, for: .valueChanged)        textField.inputView = datePicker        view.addSubview(textField)    }    func toggleDatePicker() {        isDatePickerVisible ? hideDatePicker() : showDatePicker()        isDatePickerVisible = !isDatePickerVisible    }    private func showDatePicker() {        textField.becomeFirstResponder()    }    private func hideDatePicker() {        textField.resignFirstResponder()    }}

如何在你的类(class)中使用协议(protocol):

class ViewController: UIViewController, DatePickable {    // Required by Datepickable    var isDatePickerVisible = false    var textField: UITextField = UITextField()    var datePicker: UIDatePicker = UIDatePicker()    // IBOutlets    @IBOutlet weak var dateLabel: UILabel!    @IBOutlet weak var chooseDate: UIButton!    override func viewDidLoad() {        prepareDatePickerFor(view: view,                             onChangeAction: #selector(ViewController.onDidChangeDate(_:)))        dateLabel.text = stringFrom(date: Date())    }    @IBAction func toggleDatePickerVisibility(_ sender: Any) {        toggleDatePicker()    }    @IBAction func onDidChangeDate(_ sender: Any) {        dateLabel.text = stringFrom(date: datePicker.date)    }    private func stringFrom(date: Date) -> String {        let dateFormatter = DateFormatter()        dateFormatter.dateFormat = "dd-MM-yyyy"        return dateFormatter.string(from: datePicker.date)    }}

关于ios - 在 Swift 中禁用选定日期的 TextField 中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com