2011-01-23 13 views
34

Jak by to zrobić?Datepicker telefonu iPhone zamiast klawiatury?

Mam formularz z UITextField. Kiedy go kliknę, chciałbym wyświetlić UIDatePicker zamiast domyślnej klawiatury, która domyślnie pojawia się na ekranie? Zauważ, że są też inne elementy w moim formularzu.

+0

Dlaczego nie używać UIDatePicker zamiast UITextField? –

+0

Niestandardowy projekt ... – xpepermint

+0

czy masz kod do tego? Mam do czynienia z tym samym problemem, – aherlambang

Odpowiedz

85

myślę, że to jest bardziej oficjalny sposób, aby to zrobić:

UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 
datePicker.tag = indexPath.row; 
textField.inputView = datePicker; 
+0

To nie działa dla mnie w iOS 5. Pole tekstowe nadal pokazuje normalną klawiaturę po kliknięciu. Po ustawieniu właściwość textField.inputView prawidłowym wskaźnikiem, a następnie natychmiast po jej przeanalizowaniu, wraca ona do zera. Ktoś ma pomysł, dlaczego? Ustawiam go w viewDidLoad. – Oscar

+2

sprawdź czy twój "datePicker" ivar nie jest zerowy – NSExplorer

+3

to działa doskonale, ale jak ukryć selektor daty po wybraniu daty – Noor

8

w .h

UIDatePicker *datePicker; 
NSDate *date; 
UIToolbar *keyboardToolbar; 

w viewDidLoad:

if (keyboardToolbar == nil) { 
    keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; 
    [keyboardToolbar setBarStyle:UIBarStyleBlackTranslucent]; 

    UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

    UIBarButtonItem *accept = [[UIBarButtonItem alloc] initWithTitle:@"Accept" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard:)]; 

    [keyboardToolbar setItems:[[NSArray alloc] initWithObjects: extraSpace, accept, nil]]; 
} 

self.txtDate.inputAccessoryView = keyboardToolbar; 

datePicker = [[UIDatePicker alloc] init]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 

self.txtDate.inputView = datePicker; 


- (void)datePickerValueChanged:(id)sender{ 

date = datePicker.date; 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"dd/MM/YYYY"]; 


[self.txtDate setText:[df stringFromDate:date]]; 
} 

w serii ujęć dodać do txtDate -> EdycjaDidEnd

- (IBAction)establishHour:(id)sender{ 

hour = hourPicker.date; 

NSDateFormatter *hf = [[NSDateFormatter alloc] init]; 
[hf setDateFormat:@"HH:MM"]; 

[self.txtHour setText:[hf stringFromDate:hour]]; 

} 

Ustawia klawiaturę jako DatePicker i utworzyła pasek narzędzi z przyciskiem, aby zaakceptować wybór.

+2

Aby poprawić jakość postu, podaj/dlaczego ten kod rozwiąże problem. –

+0

Co to jest cerrarTeclado? – lolol

+1

- (void) cerrarTeclado: (id) nadawca { [self.txtFecha resignFirstResponder]; } –

0
(IBAction)estableceHora:(id)sender{ 
    Hora = horaPicker.date; 
    NSDateFormatter *hf = [[NSDateFormatter alloc] init]; 
    [hf setDateFormat:@"HH:MM"]; 
    [self.txtHora setText:[hf stringFromDate:Hora]]; 
} 
-1

Dodane w plikach .h:

UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> 

Dodane w plikach .m:

{ 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

df.dateStyle = NSDateFormatterMediumStyle; 

pTxtDate.text = [NSString stringWithFormat:@"%@", 

[df stringFromDate:[NSDate date]]]; 

NSLog(@"pTxtDate.text %@",pTxtDate.text); 

[df release]; 

[self.view addSubview:pTxtDate]; 

[pTxtDate release]; 

DatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 300)]; 

DatePicker.datePickerMode = UIDatePickerModeDate; 

DatePicker.hidden = NO; 

DatePicker.date = [NSDate date]; 

[DatePicker addTarget:self 

    action:@selector(LabelChange:) 

forControlEvents:UIControlEventValueChanged]; 

[self.view addSubview:DatePicker]; 

    [DatePicker release]; 

} 



- (void)LabelChange:(id)sender { 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

df.dateStyle = NSDateFormatterMediumStyle; 

pTxtDate.text = [NSString stringWithFormat:@"%@", 

[df stringFromDate:DatePicker.date]]; 

} 
3

mam przekształcone odpowiedź Johan Kool jest do szybkich, jeśli ktoś chciałby to. Umieściłem kod w viewDidLoad.

let datePicker = UIDatePicker() 
datePicker.datePickerMode = UIDatePickerMode.Date 
datePicker.addTarget(self, action: "datePickerValueChanged:", forControlEvents: UIControlEvents.ValueChanged) 
textField.inputView = datePicker 
Powiązane problemy