Tengo una tabla de controlador de vista con (entre otros) de una célula que es para representar una fecha. He seguido este post “¿Cómo puedo hacer un modal selector de fecha que sólo cubre la mitad de la pantalla?” y lo tengo funcionando con una gran excepción – no puedo obtener el selector de desaparecer.

He intentado registrarse para el evento UIControlEventTouchUpOutside, pero parece que esto no es generado por el selector (o al menos en el modo en el que yo estoy usando).

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

También, hay una manera de desactivar el usuario de ingresar directamente en la UITextField? Quiero obligarlos a usar el selector. Vi este post “Desactivar el cursor intermitente en UITextField?“, pero hay otra manera?

Reagards,

–Juan

OriginalEl autor johnnyspo | 2012-06-16

2 Comentarios

  1. 12

    Prueba este código.. aquí voy a poner un selector de fecha para un uitextfield.. se tendrá un botón hecho en la parte superior derecha de la barra de navegación.. así que haciendo clic en hecho voy usuario puede descartar el selector de fecha.. el otro método mejor es poner una barra de herramientas sobre el datepicker de tener el botón listo.. Prueba esto va a trabajar.. cuando cambie el selector de fechas puede rellenar el campo de texto.. Espero que esto ayude..

    ver este stackoverflow enlace https://stackoverflow.com/a/4824319/763747 esto tendrá el datepicker con hacerse con el botón de la barra de herramientas encima del 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];
    }
    Veo que la técnica utilizada en los Contactos, dicen que si se agrega un cumpleaños. Voy a tener que rehacer mi punto de vista porque actualmente tengo un botón “Cancelar” como el derecho botón de la barra de punto. Voy a darle una oportunidad. Gracias por la respuesta!
    Incluso tengo un botón de guardar.. usted puede cambiar los botones..
    Exactamente lo que hice!! Gracias de nuevo.

    OriginalEl autor Dilip Rajkumar

  2. -2

    He utilizado un método diferente para la desaparición de la UIDatePicker.

    crear un XIB (nib) de archivo y agregar un UIDatePicker, a continuación, cambiar el tamaño de la vista de modo que se ajusta sólo la UIDatePicker, crear una propiedad (que sea fuerte y nonatomic) en su ViewController (o cualquiera que sea la clase de su uso, y sintetizar, por supuesto).

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

    a continuación, crear un loadDatePickerView método

    - (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 textFieldDidBeginEditing llamada al método de la loadDatePickerView método,

    [self loadDatePickerView];

    para hacer la función de crear una propiedad que es un UIDatePicker instancia

    @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 conecte el IBAction para el seleccionador en el archivo XIB, de esa manera el XIB es ahora el UIDatePicker instancia creada en la VC, si usted desea que desaparezca usted puede agregar un UITapGestureRecognizer (en el ViewDidLoad) y el selector será otro IBAction que elimina myDatePickerView a partir de su superView como este:

    - (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];
    } 

    OriginalEl autor iOSMaster

Dejar respuesta

Please enter your comment!
Please enter your name here