用于文本字段输入的Swift UIDatePicker-如何让UIDatePicker消失?

ggazkfy8  于 2023-03-16  发布在  Swift
关注(0)|答案(4)|浏览(130)

这是我第一次尝试Swift或iPhone应用程序,所以不用说,我不知道如何在这一点上做很多事情。
现在我有一个带有文本字段和按钮的视图控制器。我已经设法找到了几乎可以完成我所需要的示例代码。我想做以下事情:
1.当我单击文本字段时,屏幕上出现UIDatePicker
1.将UIDate选取器设置为仅显示时间-不显示日期。
1.在文本字段中输入所选的UIDatePicker时间。
1.当我单击按钮时,让UIDatePicker消失。
1到3都正常,但我不知道如何让UIDatePicker消失,而当我再次点击文本字段时,它仍然会出现在屏幕上。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dateField: UITextField!

    @IBAction func dateField(sender: UITextField) {

        var datePickerView  : UIDatePicker = UIDatePicker()
        datePickerView.datePickerMode = UIDatePickerMode.Time
        sender.inputView = datePickerView
        datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)

    }
    @IBAction func DoneButton(sender: UIButton) {

        //How to make datepicker disappear???
    }

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

    override func viewDidLoad() {
     super.viewDidLoad()
     // Do any additional setup after loading the view, typically from a nib.

    }

}
iyzzxitl

iyzzxitl1#

在文本字段中调用resignFirstResponder

@IBAction func DoneButton(sender: UIButton) {
    dateField.resignFirstResponder()
}

此外,让一个方法和一个属性具有相同的名称也不是一个好主意--不确定它们的优先级,但在某些时候可能会引起混淆。

fquxozlt

fquxozlt2#

您可以尝试使用gestureRecognizer之类的方法来使UIDatePicker消失:

@objc func viewTapped(gestureRecognizer: UITapGestureRecognizer) {
   view.endEditing(true)    
}

这是我在我的应用程序中使用的,所以当用户点击屏幕上的任何地方时,UIDatePicker就会消失!

pbpqsu0x

pbpqsu0x3#

您也可以只为datePicker创建一个插座。@IBOutlet weak var datePicker:UIPickerView!
那么在函数中

@IBAction func DoneButton(sender: UIButton) {

    datePicker.hidden = true
}
1rhkuytd

1rhkuytd4#

下面是另一种方法,在Swift 5中只使用一个IBOutlet作为日期文本字段,其余的通过编程完成。
YouTube上有一个很好的视频“Swift with Yash”介绍了这种实现方式:https://www.youtube.com/watch?v=8NngJrVFfUw

雨燕5号

class viewController: UIViewController {
    
    // This is the IBOutlet to your date text field in storyboard
    let dateTextField: UITextField!

    // We will use this to configure the date picker
    let datePicker = UIDatePicker()

    override func viewDidLoad() {
        // Call function to set up date picker
        createDatePickerView()
    }

    // Call this fxn in ViewDidLoad to set up the date picker
    func createDatePickerView() {

        // Set your preferences for datePicker mode/style
        datePicker.datePickerMode = UIDatePicker.Mode.date
        datePicker.preferredDatePickerStyle = UIDatePickerStyle.wheels
        
        // Create toolbar where a "Done" button will go
        let toolbar = UIToolbar()
        toolbar.sizeToFit()
    
        // Create Done button
        let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
        toolbar.setItems([doneBtn], animated: true)
        
        // Assign toolbar to the top of the text field input view
        dateTextField.inputAccessoryView = toolbar
        
        // Assign date picker as the input view for the text field
        dateTextField.inputView = datePicker
    }

    // This function is called when the Done button is pressed
    func donePressed() {

        // Create formatter to make date more readable
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        formatter.timeStyle = .none
        
        // Show formatted text in date text field
        dateTextField.text = formatter.string(from: datePicker.date)
        
        // Close date picker
        self.view.endEditing(true)    
    }

}

相关问题