2012-06-25 11 views
19

Śledziłem ten wątek: datepicker by clicking on textfieldiPhone wyświetlacz daty kompletacji na UITextField dotyku

I importowane zarówno z następujących protokołów:

@interface ViewController : UIViewController<UIActionSheetDelegate, UITextFieldDelegate> { 

Następnie, w realizacji, używam następujące:

- (void)viewDidLoad { 

    textField.delegate = self; 

[super viewDidLoad] } 

Na koniec wstawiam aktualny kod, aby wyświetlić selektor daty (z wątku). Powiązałem to wszystko w 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]; 
} 

Jednak po kliknięciu na UITextField, otrzymuję to:

enter image description here

Co robię źle?

+0

Dla zabawy spróbuj umieścić linię "[super viewDidLoad]" przed "textField.delegate = self;" linia w twojej metodzie viewDoLoad! – trumpetlicks

+0

Próbowałem tego właśnie teraz. Ten sam wynik :( – MrHappyAsthma

Odpowiedz

57

Można użyć właściwości widoku wejściowego UITextField. Wystarczy przydzielić inicjał regularny UIDatePicker w kodzie i przypisać go do inputView pola tekstowego. W ten sposób zamiast klawiatury wyświetli się UIPickerView. Jeśli potrzebujesz żadnego kodu nie krępuj się zapytać :)

EDIT: Kod

Ty pięść podłączyć swój textField z IB

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

W realizacji

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

który przyniesie w górę UIDatePicker po dotknięciu textField. Zwróć uwagę na akcję, którą dodałem do datePicker.

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

Aby zaktualizować textField za każdym razem, gdy użytkownik przewija w kompletacji, wystarczy zaimplementować metodę updateTextField gdzieś w viewController

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

Dzięki tej ostatniej metody, za każdym razem obraca użytkowników selektor, pole tekstowe zostanie zaktualizowane!

  • Można użyć wartości NSDateFormatter, aby poprawić wyjściowy ciąg znaków.
+0

Nienawidzę być kłopotami, ale czy mógłbyś pokazać przykład tego, co masz na myśli? Nie rozumiem: P Jestem całkiem nowym użytkownikiem Iphone Development – MrHappyAsthma

+0

Dodałem ci kod, jeśli potrzebujesz jakiegoś dodatkowego wyjaśnienia, po prostu zapytaj! – tomidelucca

+0

Gdzie w implementacji umieściłem UIDatePicker część kodu? – MrHappyAsthma

11

Poniżej przedstawiam sposób wybierania daty.

- (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

Proszę przejść przez ten proces W pliku .h utworzyć obiektu dla UIDatePicker

UIDatePicker *datePicker; 

w.m plik 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]; 

po tym można tworzyć 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]) { 
    } 
} 

To działa dla mnie.

Powiązane problemy