2012-06-25 13 views
19

que siguió a este tema: datepicker by clicking on textfieldiPhone visualización de la fecha selector de UITextField toque

Importé ambos de los siguientes protocolos:

@interface ViewController : UIViewController<UIActionSheetDelegate, UITextFieldDelegate> { 

A continuación, en la implementación, uso el siguiente:

- (void)viewDidLoad { 

    textField.delegate = self; 

[super viewDidLoad] } 

Por último, puse el código actual para mostrar el selector de fecha (del hilo). También lo relacioné todo en el IB.

//Date Picker 
- (void)textFieldDidBeginEditing:(UITextField *)aTextField{  
    [aTextField resignFirstResponder]; 

    pickerViewPopup = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 

    UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 0, 0)]; 
    pickerView.datePickerMode = UIDatePickerModeDate; 
    pickerView.hidden = NO; 
    pickerView.date = [NSDate date]; 

    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    pickerToolbar.barStyle = UIBarStyleBlackOpaque; 
    [pickerToolbar sizeToFit]; 

    NSMutableArray *barItems = [[NSMutableArray alloc] init]; 

    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
    [barItems addObject:flexSpace]; 

    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)]; 
    [barItems addObject:doneBtn]; 

    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)]; 
    [barItems addObject:cancelBtn]; 

    [pickerToolbar setItems:barItems animated:YES]; 

    [pickerViewPopup addSubview:pickerToolbar]; 
    [pickerViewPopup addSubview:pickerView]; 
    [pickerViewPopup showInView:self.view]; 
    [pickerViewPopup setBounds:CGRectMake(0,0,320, 464)];  
} 

-(void)doneButtonPressed:(id)sender{ 
    //Do something here here with the value selected using [pickerView date] to get that value 
     [pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES]; 
} 

-(void)cancelButtonPressed:(id)sender{ 
    [pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES]; 
} 

Sin embargo, al hacer clic en el UITextField, me sale esto:

enter image description here

¿Qué estoy haciendo mal?

+0

Simplemente por diversión, intente poner la línea "[super viewDidLoad]" antes de "textField.delegate = self;" línea en su método viewDidLoad! – trumpetlicks

+0

Lo intenté justo ahora. Mismo resultado :( – MrHappyAsthma

Respuesta

57

Puede usar la propiedad de vista de entrada UITextField. Simplemente asigne un código UIDatePicker normal en el código y asígnelo al inputView del campo de texto. Al hacer esto, se presentará UIPickerView en lugar del teclado. Si necesita cualquier código no dude en preguntar :)

EDIT: código

Usted puño conectó su textField con IB

@interface myViewController <UITextFieldDelegate> 
@property (nonatomic,weak) IBOutlet UITextField *myTextField; 
@end 

En la implementación

UIDatePicker *datePicker = [[UIDatePicker alloc]init]; 
[datePicker setDate:[NSDate date]]; 
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];  
[self.myTextField setInputView:datePicker]; 

que traerá hasta UIDatePicker cuando toca en textField. Tenga en cuenta la acción que agregué al datePicker.

[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged]; 

Para actualizar el campo de texto cada vez que el usuario se desplaza en el selector, sólo tiene que poner en práctica el método updateTextField en algún lugar del viewController

-(void)updateTextField:(id)sender 
{ 
    UIDatePicker *picker = (UIDatePicker*)self.myTextField.inputView; 
    self.myTextField.text = [NSString stringWithFormat:@"%@",picker.date]; 
} 

Con este último método, cada vez que gira el usuario el selector, ¡el campo de texto se actualizará!

  • Puede utilizar NSDateFormatter para mejorar la salida de la cadena.
+0

Odio ser una molestia, pero ¿podría mostrar algún ejemplo de lo que quiere decir? No sigo: P Soy bastante nuevo en el desarrollo de Iphone. – MrHappyAsthma

+0

le he agregado el código, si necesito más explicaciones solo pregunta! – tomidelucca

+0

¿Dónde en la implementación pongo el UIDatePicker como parte del código? – MrHappyAsthma

11

A continuación se muestra cómo estoy mostrando el selector de fecha.

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 


    self.activeTextField = textField; 

    // Create a date picker for the date field. 
    UIDatePicker *datePicker = [[UIDatePicker alloc]init]; 
    datePicker.datePickerMode = UIDatePickerModeDate; 
    datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:-31536000]; 
    [datePicker setDate:[NSDate date]]; 
    [datePicker addTarget:self action:@selector(updateDateField:) forControlEvents:UIControlEventValueChanged]; 

    // If the date field has focus, display a date picker instead of keyboard. 
    // Set the text to the date currently displayed by the picker. 
    if (textField.tag == 1) 
    { 
    self.date.inputView = datePicker; 
    self.date.text = [self formatDate:datePicker.date]; 
    } 
} 


// Called when the date picker changes. 
- (void)updateDateField:(id)sender 
{ 
    UIDatePicker *picker = (UIDatePicker*)self.date.inputView; 
    self.date.text = [self formatDate:picker.date]; 
} 


// Formats the date chosen with the date picker. 
- (NSString *)formatDate:(NSDate *)date 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"MM'/'dd'/'yyyy"]; 
    NSString *formattedDate = [dateFormatter stringFromDate:date]; 
    return formattedDate; 
} 
0

Por favor, vaya a través de este proceso En archivo .h crear el objeto de UIDatePicker

UIDatePicker *datePicker; 

en.m archivo viewDidloadMethod

datePicker = [[UIDatePicker alloc]init]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
datePicker.minimumDate = [NSDate date]; 
[_dateTxtFld setInputView:datePicker]; 
UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; 
[toolBar setTintColor:[UIColor grayColor]]; 
UIBarButtonItem *doneBtn=[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(showSelectedDate)]; 
UIBarButtonItem *space=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
[toolBar setItems:[NSArray arrayWithObjects:space,doneBtn, nil]]; 

[_dateTxtFld setInputAccessoryView:toolBar]; 

después de que se puede crear ShowSele

-(void)showSelectedDate { 
    if ([_dateTxtFld isFirstResponder]) { 
     NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; 
     [formatter setDateFormat:@"YYYY-MM-dd"]; 
     _dateTxtFld.text=[NSString stringWithFormat:@"%@",[formatter stringFromDate:datePicker.date]]; 
     [_dateTxtFld resignFirstResponder]; 
    } 
    else if ([_timeTxtFld isFirstResponder]) { 
    } 
} 

obras de él para mí.

Cuestiones relacionadas