2015-05-04 11 views
6

Chiedo la data di nascita degli utenti nella schermata di registrazione della mia domanda. Non riesco a capire come ottenere una data di nascita UIDatePicker da visualizzare. Ho provato ad utilizzare il seguente codice ma mostra solo la data e l'ora:Come aggiungo una data di nascita UIDatePicker a UITextField?

UIDatePicker *dp = [[UIDatePicker alloc]init]; 
_textBirthday.inputView = dp; 

Inoltre, come faccio a impostarlo in modo che accetti solo gli utenti nati dopo un certo anno?

+0

'proprietà minimumData' di' UIDatePicker'? – Larme

+1

e cosa intendi con * mostra solo la data e l'ora *? cosa vuoi che venga visualizzato? –

risposta

16

1) nel file h del vostro controller della vista fare in modo di assegnare textfield delegato:

@interface YourViewController : UIViewController <UITextFieldDelegate> 

e anche avere un IBOutlet del Textfield compleanno

2) dichiarare una selezione data come variabile di classe per renderlo accessibile da tutti i diversi metodi in classe. nel file .m eseguire quanto segue dopo l'importazione e prima applicazione:

@interface YourViewController() { 
UIDatePicker *datePicker; 
} 
@end 

3) in viewDidLoad:

// make the textfield its own delegate 
self.BirthdateTextfield.delegate = self; 

// alloc/init your date picker, and (optional) set its initial date 
datePicker = [[UIDatePicker alloc]init]; 
[datePicker setDate:[NSDate date]]; //this returns today's date 

// theMinimumDate (which signifies the oldest a person can be) and theMaximumDate (defines the youngest a person can be) are the dates you need to define according to your requirements, declare them: 

// the date string for the minimum age required (change according to your needs) 
NSString *maxDateString = @"01-Jan-1996"; 
// the date formatter used to convert string to date 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
// the specific format to use 
dateFormatter.dateFormat = @"dd-MMM-yyyy"; 
// converting string to date 
NSDate *theMaximumDate = [dateFormatter dateFromString: maxDateString]; 

// repeat the same logic for theMinimumDate if needed 

// here you can assign the max and min dates to your datePicker 
[datePicker setMaximumDate:theMaximumDate]; //the min age restriction 
[datePicker setMinimumDate:theMinimumDate]; //the max age restriction (if needed, or else dont use this line) 

// set the mode 
[datePicker setDatePickerMode:UIDatePickerModeDate]; 

// update the textfield with the date everytime it changes with selector defined below 
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged]; 

// and finally set the datePicker as the input mode of your textfield 
[self.BirthdateTextfield setInputView:datePicker]; 

4) in stesso file .m, definire il selettore che aggiornerà textfield ogni volta le modifiche di selezione di data:

-(void)updateTextField:(id)sender { 
    UIDatePicker *picker = (UIDatePicker*)self.BirthdateTextfield.inputView; 
    self.BirthdateTextfield.text = [self formatDate:picker.date]; 
} 

5) non da ultimo, questo è il metodo chiamato prima di assegnare la data al TextField.text (TextField.text bisogno di una stringa non una data):

- (NSString *)formatDate:(NSDate *)date { 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"]; 
    NSString *formattedDate = [dateFormatter stringFromDate:date]; 
    return formattedDate; 
} 

buona lettura!

+0

Che cos'è 'Helper'? –

+1

oh mio male! è un'abitudine a usare sempre una classe di supporto singleton chiamata "Helper" in tutti i miei controller di vista per un facile accesso a quei metodi comuni .. in questo caso formatDate prende un NSDate e restituisce NSString. modificherai la mia risposta per includere il metodo in modo che tu possa includerlo nel tuo controller di visualizzazione – carlos16196

+0

@ carlos16196 Grazie per la risposta dettagliata, purtroppo ottengo alcuni errori con il codice i.imgur.com/0EXr9HP.png – George

0

Impostare datePickerMode su UIDatePickerModeDate.

datePicker.datePickerMode = UIDatePickerModeDate; 

Apple Docs: Il calendario visualizza mesi, giorni del mese, e anni. L'ordine esatto di questi articoli dipende dalle impostazioni locali. Un esempio di questa modalità è [Novembre | 15 | 2007]. Disponibile in iOS 2.0 e versioni successive.

1

utilizzare il seguente codice si otterrà un output automaticamente:

- (void)viewDidLoad { 
[super viewDidLoad]; 

UIDatePicker *datePicker = [[UIDatePicker alloc]init]; 
[datePicker setDate:[NSDate date]]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged]; 
[self.dobTextField setInputView:datePicker]; 
} 

-(void) dateTextField:(id)sender{ 
UIDatePicker *picker = (UIDatePicker*)self.dobTextField.inputView; 
[picker setMaximumDate:[NSDate date]]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
NSDate *eventDate = picker.date; 
[dateFormat setDateFormat:@"dd/MM/yyyy"]; 
NSString *dateString = [dateFormat stringFromDate:eventDate]; 
self.dobTextField.text = [NSString stringWithFormat:@"%@",dateString]; 
} 

Ecco il codice Swift 4:

override func viewDidLoad() { 
    super.viewDidLoad() 
    showDatePicker() 
} 

//MARK: Show Date Picker 
func showDatePicker(){ 
    //Formate Date 
    datePicker.datePickerMode = .date 
    //ToolBar 
    let toolbar = UIToolbar(); 
    toolbar.sizeToFit() 
    //done button & cancel button 
    let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(donedatePicker)) 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
    let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelDatePicker)) 

    toolbar.setItems([cancelButton,spaceButton,doneButton], animated: false) 

    // add toolbar to textField 
    dateOfBirthTxtFldRef.inputAccessoryView = toolbar 
    // add datepicker to textField 
    dateOfBirthTxtFldRef.inputView = datePicker 
} 

@objc func donedatePicker(){ 
    //For date formate 
    let formatter = DateFormatter() 
    formatter.dateFormat = "dd MMMM yyyy" 
    dateOfBirthTxtFldRef.text! = formatter.string(from: datePicker.date) 
    //dismiss date picker dialog 
    self.view.endEditing(true) 
} 

@objc func cancelDatePicker(){ 
    //cancel button dismiss datepicker dialog 
    self.view.endEditing(true) 
}