2012-06-16 18 views
6

Tengo un controlador de vista de tabla con (entre otros) una celda que representará una fecha. Seguí esta publicación "How do I make a modal date picker that only covers half the screen?" y lo tengo trabajando con una gran excepción: ¡no puedo hacer que desaparezca el selector!Reemplazo de entrada de UITextField con un UIDatePicker

Intenté registrarme para el evento UIControlEventTouchUpOutside, pero parece que esto no ha sido generado por el selector (o al menos en el modo en que lo estoy usando).

¿Cómo puedo reconocer que el usuario ha terminado de seleccionar una fecha?

Además, ¿hay alguna manera de impedir que el usuario ingrese directamente en el UITextField? Quiero obligarlos a usar el selector. Vi esta publicación "Disable blinking cursor in UITextField?", pero ¿hay alguna otra manera?

Reagards,

--John

Respuesta

12

probar este código .. aquí estoy poniendo un selector de fechas a un UITextField .. Tendrá un botón hecho en la barra de navegación superior derecha .. así haciendo clic hecho, el usuario podrá descartar el datepicker ... el otro mejor método es colocar una barra de herramientas sobre el selector de fecha que tiene el botón hecho. Intenta esto, funcionará ... al cambiar el datepicker puedes rellenar el campo de texto ... Espero que esto ayude ..

ver este enlace stackoverflow https://stackoverflow.com/a/4824319/763747 esto tendrá el datepicker con done b utton como barra de herramientas sobre el teclado ...

#pragma mark - 
#pragma mark - TextField Delegate 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return TRUE; 
} 


- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    itsRightBarButton.title = @"Done"; 
    itsRightBarButton.style = UIBarButtonItemStyleDone; 
    itsRightBarButton.target = self; 
    itsRightBarButton.action = @selector(doneAction:); 
    if ([textField isEqual:itsIncidentDateTextField]) 
    { 
     itsDatePicker = [[[UIDatePicker alloc] init] autorelease]; 
     itsDatePicker.datePickerMode = UIDatePickerModeDate; 
     [itsDatePicker addTarget:self action:@selector(incidentDateValueChanged:) forControlEvents:UIControlEventValueChanged]; 
     //datePicker.tag = indexPath.row; 
     textField.inputView = itsDatePicker; 
    } 
} 

- (IBAction) incidentDateValueChanged:(id)sender{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMM d, yyyy"]; 
    itsIncidentDateTextField.text = [dateFormatter stringFromDate:[itsDatePicker date]]; 
    [dateFormatter release]; 
} 
+0

veo que es la técnica utilizada en los contactos, por ejemplo si se agrega un cumpleaños. Tendré que volver a trabajar mi vista porque actualmente tengo un botón "Cancelar" como elemento del botón de la barra derecha. Lo probaré. ¡Gracias por la respuesta! – johnnyspo

+0

Incluso tengo un botón para guardar ... puede cambiar los botones ... –

+0

¡¡Exactamente lo que hice !! Gracias de nuevo. – johnnyspo

-2

He utilizado un método diferente para desaparecer el UIDatePicker.

crea un archivo XIB (plumín) y agrega un UIDatePicker luego cambia el tamaño de la vista para que solo se ajuste al UIDatePicker, crea una propiedad (hazlo fuerte y no atómico) en tu ViewController (o cualquier clase que uses, y sintetiza por supuesto).

@property (nonatomic, strong) UIView *myDatePickerView; 
@synthesize myDatePickerView; 

continuación, crear un método loadDatePickerView

- (void) loadDatePickerView 
{ 
    UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]]; 
    NSArray *views = [nib instantiateWithOwner:self options:nil]; 
    self.myDatePickerView = [views firstObject]; 
    [myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)]; 
    [self.view addSubview:myDatePickerView]; 
} 

implementar el UITextFieldDelegate, y en el método textFieldDidBeginEditing llamar al método loadDatePickerView,

[self loadDatePickerView]; 

para hacer la función de crear una propiedad que es una interfaz de usuario DatePicker ejemplo

@property (nonatomic,strong) 

UIDatePicker *myDatePicker; 

(sintetizar por supuesto)

ahora crear un IBAction así:

-(IBAction)datePickerValueChanged:(UIDatePicker *)sender 
{ 
    myDatePicker = [[myDatePickerView subviews] lastObject]; 
    //now you can do whatever you want with the DatePicker 
} 

ahora conectar el IBAction al selector en el archivo XI ter, de esa manera la XIB ahora es la instancia de UIDatePicker que creó en el VC; si desea que desaparezca, puede agregar un UITapGestureRecognizer (en ViewDidLoad) y el elector será otro IBAction que elimina myDatePickerView de su Superview así:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(dropPicker:)]; 
    [self.view addGestureRecognizer:tap]; 
    [self datePickerValueChanged:myDatePicker]; 
} 

-(IBAction)dropPicker:(id)sender 
{ 
    [myDatePickerView removeFromSuperview]; 
} 
Cuestiones relacionadas