ios4 - español - Mostrar datepicker al tocar en el campo de texto
datepicker range (5)
Hay una clase realmente útil que encontré: la publicación del blog está aquí: http://www.pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/ pero básicamente utiliza la entrada. / inputAccessory también. El truco es que el UILabel, al menos por lo que estaba haciendo, era exactamente lo que necesitaba.
¿Cómo puedo mostrar un control de selección de fecha y hora al tocar un cuadro de texto?
Tengo una interfaz de usuario que tiene campos de texto de llegada y salida, y cuando un usuario hace clic en el cuadro de texto de llegada, debe mostrar un control de selección de fecha y hora en lugar de un teclado y lo mismo con el cuadro de texto de salida.
Muy simple, en ViewController.h
pone el UITextFieldDelegate
después en viewDidLoad
.
txtFecha.delegate = self;
datePicker = [[UIDatePicker alloc]init];
[datePicker setDatePickerMode:UIDatePickerModeDate];
self.txtFecha.inputView = datePicker;
abrir selector de fecha al hacer clic en textField swift 3.0 agregar UITextFieldDelegate y establecer delegate en ViewDidload () tfDate.delegate = self
//MARK:- TextField Delegate
//MARK:-
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
//MARK:- DatePicker
//MARK:-
func textFieldDidBeginEditing(_ textField: UITextField) {
self.callDatePicker(textField: tfDate)
}
func callDatePicker(textField:UITextField){
let datePickerView : UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.date
textField.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(MyViewController.handleDatePicker), for: .valueChanged)
}
var str:String = ""
var str1:String = ""
var strStartDate:Date!
var strEndDate:Date!
func handleDatePicker(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
print("Date :: /(dateFormatter.string(from: sender.date))")
tfDate.text = dateFormatter.string(from: sender.date)
}
En viewDidLoad of ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged];
[txtFieldBranchYear setInputView:datePicker];
}
Agregue un método en su ViewController
-(void) dateTextField:(id)sender
{
UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView;
[picker setMaximumDate:[NSDate date]];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSDate *eventDate = picker.date;
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSString *dateString = [dateFormat stringFromDate:eventDate];
txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString];
}
txtFieldBranchYear es una salida de UITextField
Puede usar las propiedades inputView
e inputAccessoryView
del campo de texto para esto. Cree el selector de fecha y configúrelo en las vistas de entrada de los dos campos de texto. También cree otra vista para el botón Done
y como su vista de accesorios. Necesitará ese botón para cerrar la vista de entrada.
El botón Done
debe estar conectado para funcionar, lo que básicamente hace esto:
if ( [textField1 isFirstResponder] ) {
[textField1 resignFirstResponder];
} else if ( [textField2 isFirstResponder] ) {
[textField2 resignFirstResponder];
}
Otra opción sería la subclase UITextField
y anular inputView
e inputAccessoryView
. Este es el camino a seguir cuando hay muchos de ellos.
Ejemplo
@interface CustomKeyboardAppDelegate : NSObject <UIApplicationDelegate> {
...
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITextField *textField;
@property (nonatomic, retain) IBOutlet UIToolbar *accessoryView;
@property (nonatomic, retain) IBOutlet UIDatePicker *customInput;
- (IBAction)dateChanged:(id)sender;
- (IBAction)doneEditing:(id)sender;
@end
En el XIB, extraiga una UIToolbar
y un UIDatePicker
pero no los adjunte a la vista. Conecte los tomacorrientes apropiadamente. dateChanged:
responde a los cambios en el selector de fecha y doneEditing:
se doneEditing:
cuando se Done
clic en el botón Done
en la barra de herramientas. Conéctelos también. Los métodos se implementan como se detalla a continuación.
@implementation CustomKeyboardAppDelegate
@synthesize window=_window;
@synthesize textField = _textField;
@synthesize accessoryView = _accessoryView;
@synthesize customInput = _customInput;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.textField.inputView = self.customInput;
self.textField.inputAccessoryView = self.accessoryView;
...
}
...
- (IBAction)dateChanged:(id)sender {
UIDatePicker *picker = (UIDatePicker *)sender;
self.textField.text = [NSString stringWithFormat:@"%@", picker.date];
}
- (IBAction)doneEditing:(id)sender {
[self.textField resignFirstResponder];
}
@end
Los dos últimos métodos se hincharán a medida que más campos de texto dependan de este seleccionador.