【问题标题】:How to add UIDatePicker into textField in UIAlertController?如何将 UIDatePicker 添加到 UIAlertController 的 textField 中?
【发布时间】:2021-09-16 11:46:35
【问题描述】:

我是 swift 新手,我的第一个应用程序需要帮助。我有带有待办事项的 UITableView。我需要帮助在 UIAlertController 的 textField 中添加 UIDatePicker。

 override func viewDidLoad() {
    super.viewDidLoad()
    
    self.setDatePicker.addTarget(self, action: #selector(self.dateChangeEvent), for: .valueChanged)
}

@IBAction func addNewTaskButtonAction(_ sender: Any) {
    
    let toDoAlert = UIAlertController(title: "Add ToDo", message: "Add a new task", preferredStyle: .alert)
    toDoAlert.addTextField()
    
    toDoAlert.addTextField { textField in
       textField.inputView = self.setDatePicker
        
       let toolBar = UIToolbar()
       toolBar.barStyle = .default
       toolBar.isTranslucent = true
       toolBar.isUserInteractionEnabled = true
       toolBar.sizeToFit()
        
       let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.onClickDoneButton))
        toolBar.setItems([doneButton], animated: true)
        textField.inputAccessoryView = toolBar
        
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium
        dateFormatter.timeStyle = .medium
        textField.text = dateFormatter.string(from: self.setDatePicker.date)
        
        self.view.endEditing(true)  
   }

@objc func onClickDoneButton() {
    self.view.endEditing(true)
}

 @objc private func dateChangeEvent(_ dataPicker: UIDatePicker){
    toDoAlert.textFields?.first?.text = dataPicker.date.description
}

【问题讨论】:

    标签: ios swift uidatepicker


    【解决方案1】:

    你可以这样添加

    let datePicker = UIDatePicker()
    let toDoAlert = UIAlertController(title: "Add ToDo", message: "Add a new task", preferredStyle: .alert)
    toDoAlert.addTextField { textField in
        textField.inputView = self.datePicker
    }
    

    或者

    let datePicker = UIDatePicker()
    let toDoAlert = UIAlertController(title: "Add ToDo", message: "Add a new task", preferredStyle: .alert)
    toDoAlert.addTextField()
    toDoAlert.textFields?.first?.inputView = datePicker
    

    用于设置选择器值。

    let datePicker = UIDatePicker()
    let toDoAlert = UIAlertController(title: "Add ToDo", message: "Add a new task", preferredStyle: .alert)
    
    @IBAction func showAlert(_ sender: UIButton) {
        datePicker.addTarget(self, action: #selector(dateChangeEvent), for: .valueChanged)
        toDoAlert.addTextField { textField in
            textField.inputView = self.datePicker
        }
    //=== Other Code ====
    }
    
    @objc private func dateChangeEvent(_ datePicker: UIDatePicker) {
        toDoAlert.textFields?.first?.text = datePicker.date.description
    }
    

    【讨论】:

    • 非常感谢,我使用了第一个解决方案。所以我有一个问题,如果你能帮助我?我可以添加完成按钮工具栏以及何时按下它以将日期设置为 textField?
    • 使用第一种解决方案。您将在 addTextField 闭包块中获得 textField。现在您可以执行与普通文本字段相同的任何操作。只需创建一个工具栏并将此工具栏设置为 textField。
    • 我编辑了我的问题(代码)。当我单击按钮添加任务时,textField 会填充日期。当我单击 textFiled 时,它会显示选择器视图和完成按钮,但不会更改日期。我做错了什么?
    • 你在哪里设置日期选择器目标?
    • 我不知道在哪里设置。
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多