如何在 Swift 中选择 UIPickerView 时隐藏键盘



我有一个日期选择器,用户在其中选择时间和日期字段,键盘首先显示,然后我必须再次单击文本字段才能显示选择器。我想要的是日期选择器在第一次尝试时出现。

这是我的代码

@IBOutlet var dateField: UITextField! = UITextField()
@IBOutlet var timeField: UITextField! = UITextField()
@IBAction func userPickDate(sender: UITextField) {
    var datePickerView  : UIDatePicker = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.Date
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
}
  @IBAction func userPickTime(sender: UITextField) {
    var datePickerView  : UIDatePicker = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.Time
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("handleTimePicker:"), forControlEvents: UIControlEvents.ValueChanged)
}
   func handleTimePicker(sender: UIDatePicker)
{
    var timeFormatter = NSDateFormatter()
    timeFormatter.timeStyle = .ShortStyle
    timeField.text = timeFormatter.stringFromDate(sender.date)
}

func handleDatePicker(sender: UIDatePicker) {
    var timeFormatter = NSDateFormatter()
    timeFormatter.dateStyle = .MediumStyle
    //timeFormatter.timeStyle = .ShortStyle
    dateField.text = timeFormatter.stringFromDate(sender.date)

}

丢弃最后一个答案。我明白你在做什么。这是我发现的:将 UPickerView 对象的声明放在类的作用域中而不是本地化到处理程序似乎有效。这是代码。请注意添加的 resignFirstResponder()。

import UIKit
class ViewController: UIViewController {
    var datePickerView  : UIDatePicker = UIDatePicker()
    var timePickerView  : UIDatePicker = UIDatePicker()
    @IBOutlet weak var dateField: UITextField!
    @IBOutlet weak var timeField: UITextField!
    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    datePickerView.datePickerMode = UIDatePickerMode.Date
    dateField.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
    handleDatePicker(datePickerView)

    timePickerView.datePickerMode = UIDatePickerMode.Time
    timeField.inputView = timePickerView
    timePickerView.addTarget(self, action: Selector("handleTimePicker:"), forControlEvents: UIControlEvents.ValueChanged)
    handleTimePicker(timePickerView)

}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func handleDatePicker(sender: UIDatePicker) {
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = .MediumStyle
    //timeFormatter.timeStyle = .ShortStyle
    dateField.text = dateFormatter.stringFromDate(sender.date)
    dateField.resignFirstResponder()
}
func handleTimePicker(sender: UIDatePicker) {
    var timeFormatter = NSDateFormatter()
    timeFormatter.timeStyle = .ShortStyle
    timeField.text = timeFormatter.stringFromDate(sender.date)
    timeField.resignFirstResponder()
}
}

您需要在文本字段上放置一个操作,如下所示:

    @IBAction func userDOBSelectedAction(sender: UITextField) {
    userDOBTextField.resignFirstResponder()
}

这是 Syed 对 Swift 2.2 的回答的更新版本,包括一些格式更新。

import UIKit
class ViewController: UIViewController {
    var datePickerView  : UIDatePicker = UIDatePicker()
    var timePickerView  : UIDatePicker = UIDatePicker()
    @IBOutlet weak var dateField: UITextField!
    @IBOutlet weak var timeField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        datePickerView.datePickerMode = .Date
        dateField.inputView = datePickerView
        datePickerView.addTarget(self, action: #selector(ViewController.handleDatePicker(_:)), forControlEvents: .ValueChanged)
        handleDatePicker(datePickerView)
        timePickerView.datePickerMode = .Time
        timeField.inputView = timePickerView
        timePickerView.addTarget(self, action: #selector(ViewController.handleTimePicker(_:)), forControlEvents: .ValueChanged)
        handleTimePicker(timePickerView)
    }
    func handleDatePicker(sender: UIDatePicker) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateStyle = .MediumStyle
        dateField.text = dateFormatter.stringFromDate(sender.date)
        dateField.resignFirstResponder()
    }
    func handleTimePicker(sender: UIDatePicker) {
        let timeFormatter = NSDateFormatter()
        timeFormatter.timeStyle = .ShortStyle
        timeField.text = timeFormatter.stringFromDate(sender.date)
        timeField.resignFirstResponder()
    }
}

最新更新