【问题标题】:Having trouble having a "done" button appear, that closes a datePickerView from UITextField出现“完成”按钮时遇到问题,该按钮从 UITextField 关闭 datePickerView
【发布时间】:2017-01-25 06:36:08
【问题描述】:

我有一个UITextField,它目前正在正确显示DatePickerView。我试过四处寻找如何添加完成按钮,但我找不到让它工作或注册关闭DatePicker的方法。

这是当有人点击UITextField时显示DatePicker的函数:

@IBAction func selectDate(_ sender: UITextField) {
    let datePickerView:UIDatePicker = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.date
    sender.inputView = datePickerView

    datePickerView.addTarget(self, action: #selector(self.datePickerValueChanged), for: UIControlEvents.valueChanged)
}

这是一个跟踪任何更改并将其显示在 UITextField 中的函数

func datePickerValueChanged(sender:UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = DateFormatter.Style.short
    dateFormatter.timeStyle = DateFormatter.Style.none

    birthday.text = dateFormatter.string(from: sender.date)

}

如何向关闭 DatePicker 的特定代码添加按钮?

【问题讨论】:

  • 如果用户触摸 viewController 中的任何位置,除了 textField 和 keyboardPicker,我将如何关闭 datePicker(例如键盘)?

标签: ios swift xcode datepicker uitextfield


【解决方案1】:
override func viewDidLoad() {
super.viewDidLoad()

let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 30))

let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: “Done”, style: .Done, target: self, action: Selector(“doneButtonAction”))

var buttons = [UIBarButtonItem]()
buttons.append(space)
buttons.append(doneButton)
toolbar.setItems(buttons, animated: false)
toolbar.sizeToFit()


self.datePickerView.inputAccessoryView = toolbar
}

func doneButtonAction(){
self.view.endEditing(true)
}

【讨论】:

    【解决方案2】:

    另一种方法是在datePickerValueChanged 事件中首先关闭键盘,然后隐藏您的UIDatePicker

    func datePickerValueChanged(sender:UIDatePicker) {
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = DateFormatter.Style.short
            dateFormatter.timeStyle = DateFormatter.Style.none
    
            birthday.text = dateFormatter.string(from: sender.date)
    
           self.view.endEditing(true) // Hide keyboard
    
        }
    

    【讨论】:

      【解决方案3】:

      您也可以使用它。

       override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
              self.view.endEditing(true)
       }
      

      通过使用它,您不需要任何完成按钮。
      它会在你的 textField 或 textView 外部点击退出。
      注意:它不会影响 scrollView。

      【讨论】:

        【解决方案4】:

        添加以下两个动作,并在 viewDidLoad 函数中添加代码。

        override func viewDidLoad() {
                super.viewDidLoad()
                datePickerView = UIDatePicker()
                datePickerView!.datePickerMode = .Date
                txtxt.inputView = datePickerView
                datePickerView!.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
                let toolBar = UIToolbar(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(self.view.frame.size.width), height: CGFloat(44)))
                toolBar.tintColor = UIColor.grayColor()
                let doneBtn = UIBarButtonItem(title: "Done", style: .Bordered, target: self, action:"ShowSelectedDate")
        
                let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
        
                toolBar.items = [space, doneBtn]
                txtxt.inputAccessoryView = toolBar
                // Do any additional setup after loading the view, typically from a nib.
            }
         func ShowSelectedDate(){
                self.view.endEditing(true)
            }
        
            func handleDatePicker(sender: UIDatePicker) {
                let dateFormatter = NSDateFormatter()
                dateFormatter.dateFormat = "yyyy-MM-dd"
                txtxt.text = dateFormatter.stringFromDate(sender.date)
            }
        

        【讨论】:

          猜你喜欢
          • 2015-03-18
          • 2014-09-09
          • 1970-01-01
          • 1970-01-01
          • 2019-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多