2011-01-23 23 views
34

Bunu nasıl yaparsınız?Klavye yerine iPhone datepicker?

UITextField ile bir formum var. Tıkladığımda, varsayılan olarak açılan varsayılan Klavye yerine bir UIDatePicker görüntülemek isterim? Benim formumda başka öğeler de var. ViewDidLoad .h

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

yılında

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

Neden UITextField yerine bir UIDatePicker kullanmıyorsunuz? –

+0

Özel tasarım ... – xpepermint

+0

Bunun için kodunuz var mı? Ben de aynı sorunun yanı sıra – aherlambang

cevap

85

Bunu yapmak için daha resmi bir yol olduğunu düşünüyorum txtDate eklemek Film şeridinde

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

-> DüzenlemeKuruluşları

- (IBAction)establishHour:(id)sender{ 

hour = hourPicker.date; 

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

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

} 

Klavyeyi DatePicker olarak ayarlar ve seçimi kabul etmek için bir düğme içeren bir araç çubuğu oluşturdu. .h dosyalarında

+0

Bu benim için iOS 5'de çalışmıyor. Metin alanı tıklandığında normal klavyeyi hala gösteriyor. TextField.inputView öğesini geçerli bir işaretçi ile ayarladıktan ve hemen ardından inceledikten sonra tekrar sıfırlanır. Neden olduğu hakkında bir fikri olan var mı? Bunu viewDidLoad'da ayarlıyorum. – Oscar

+2

kontrol edin ve "datePicker" ivar nil – NSExplorer

+3

olup olmadığını görmek için bu mükemmel çalışıyor, ancak tarih seçildikten sonra tarih seçiciyi gizlemek için – Noor

8

:

+2

Yayınınızın kalitesini artırmak için lütfen bu kodun sorunu nasıl/neden çözeceğini belirtin. –

+0

cerrarTeclado nedir? – lolol

+1

- (void) cerrarTeclado: (id) gönderen { [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

Eklendi: .m dosyaları

UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> 

Eklendi:

{ 

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

kimse isterseniz diye Swift içine Johan Kool'ın cevabı dönüştürdüğünüz o. Kodu viewDidLoad'a yerleştirdim.

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