ios - delegate - Swift UIDatePicker para la entrada del campo de texto: ¿cómo hacer que desaparezca UIDatePicker?
uidatepicker delegate swift 4 (3)
Este es mi primer intento en Swift o una aplicación para iPhone, por lo que no hace falta decir que no estoy seguro de cómo hacer muchas cosas en este momento.
Ahora mismo tengo un controlador de vista con un campo de texto y un botón. Me las arreglé para encontrar código de ejemplo para casi lograr lo que necesito. Me gustaría hacer lo siguiente:
- Cuando hago clic en el campo de texto, aparece un UIDatePicker en la pantalla.
- Establezca el selector UIDate para mostrar solo la hora, no una fecha.
- Ponga el tiempo seleccionado de UIDatePicker en el campo de texto.
- Haga que el UIDatePicker desaparezca cuando haga clic en el botón.
1 a 3 está funcionando. Pero no puedo averiguar cómo hacer que el UIDatePicker desaparezca y vuelva a aparecer en la pantalla si vuelvo a hacer clic en el campo de texto.
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.
}
}
Puedes probar algo como gestureRecognizer
para hacer que desaparezca el UIDatePicker:
@objc func viewTapped(gestureRecognizer: UITapGestureRecognizer) {
view.endEditing(true)
}
Esto es lo que usé en mi aplicación, de modo que cuando el usuario toca en cualquier lugar de la pantalla, ¡el UIDatePicker desaparece!
También puede simplemente crear una salida para el datePicker. @IBOutlet weak var datePicker: UIPickerView!
entonces en tu función
@IBAction func DoneButton(sender: UIButton) {
datePicker.hidden = true
}
resignFirstResponder
a resignFirstResponder
en el campo de texto:
@IBAction func DoneButton(sender: UIButton) {
dateField.resignFirstResponder()
}
Además, no es una buena idea tener un método y una propiedad con el mismo nombre, no estoy seguro de la prioridad allí, pero es probable que sea confuso en algún momento.