2013-07-21 15 views

risposta

4

ho di recente dovevo fare esattamente la stessa cosa

  1. Inserire un UITextField nella vostra UITableViewCell (potrebbe essere necessario creare un costume UITableViewCell a seconda se si desidera che appaia su ogni cellula dinamica della vostra UITableView o su una singola cella statica).
  2. Creare proprietà per un UIDatePicker, un UIToolbar, e un UITextField, poi in IB collegare la proprietà UITextField al UITextField creata nel passaggio 1 (Se si utilizza una classe personalizzata UITableViewCell, è lì che la proprietà UITextField avrebbe bisogno andare):

    @property (strong, nonatomic) UIDatePicker * datePicker; 
    @property (strong, nonatomic) UIToolbar * datePickerToolbar; 
    @property (strong, nonatomic) IBOutlet UITextField *textField; 
    
    ... 
    
    @synthesize datePicker, datePickerToolbar, textField; 
    
  3. Imposta il tuo UIDatePicker, UIToolbar, e UITextField:

    - (void)viewDidLoad { 
        // Initialise UIDatePicker 
        datePicker = [[UIDatePicker alloc] init]; 
        datePicker.datePickerMode = UIDatePickerModeTime; 
        [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; // method to respond to changes in the picker value 
    
        // Setup UIToolbar for UIDatePicker 
        datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; 
        [datePickerToolbar setBarStyle:UIBarStyleBlackTranslucent];  
        UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPicker:)]; // method to dismiss the picker when the "Done" button is pressed  
        [datePickerToolbar setItems:[[NSArray alloc] initWithObjects: extraSpace, doneButton, nil]]; 
    
    
        // Note: If you're using dynamic cells, the below 2 lines need to be in your cellForRowAtIndexPath method instead. 
    
        // Set UITextfield's inputView as UIDatePicker  
        textField.inputView = datePicker; 
        // Set UITextfield's inputAccessoryView as UIToolbar 
        textField.inputAccessoryView = datePickerToolbar; 
    } 
    
  4. Setup dismissPicker metodo:

    -(void)dismissPicker:(id)sender{ 
        [textField resignFirstResponder]; 
    } 
    
  5. Setup datePickerValueChanged metodo:

    - (void)datePickerValueChanged:(id)sender{ 
        NSDate *selectedDate = datePicker.date; 
    
        NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
        [df setDateFormat:@"HH:mm"]; 
    
        [textField setText:[df stringFromDate:selectedDate]]; 
    } 
    

Nota: Nel mio codice, avevo bisogno l'interfaccia per visualizzare l'ora, quindi il formato della data impostata qui (HH:mm). Per questo motivo, noterai anche che nel mio codice di inizializzazione UIDatePicker in viewDidLoad, ho impostato la sua modalità su UIDatePickerModeTime. Per le selezioni di data, è possibile impostarlo su UIDatePickerModeDate.

+0

questo è fantastico, tuttavia potresti elaborare un paio di cose. Prima ricevo questo errore quando provo a ridimensionare il datepicker: - [UIBarButtonItem resignFirstResponder]: selettore non riconosciuto e, potresti spiegare come impostare il testo dei campi di testo alla data impostata dall'utente. Sarebbe qualcosa come textField.text = ?? – Apollo

+0

@Auser Oops, controlla la modifica sul mio codice 'dismissPicker'. Inoltre, ho aggiunto il codice per un nuovo metodo per reagire a "UIControlEventValueChanged" e il codice per impostarlo su "UIDatePicker". – Yazid

+0

questo è un uomo così fantastico. Grazie per avermi dedicato del tempo per guidarmi. Lo apprezzo davvero. – Apollo

3

È possibile inserire un UITextField invisibile in UITableViewCell e impostare la vista di input di UITextFields su un UIDatePicker. Qui noi il codice:

yourdatePicker = [[UIDatePicker alloc]init]; 
yourtextField.inputView = yourdatePicker; 
0

Sto usando ActionSheetPicker [1]. Permette di mostrare qualsiasi tipo di raccoglitore da un foglio di azione in parte sovrapposto alla scena corrente. Inoltre, puoi aggiungere pulsanti (come annulla o "oggi") e un titolo nella parte superiore della vista.

[1]: la versione originale di Tim Cinel: https://github.com/TimCinel/ActionSheetPicker Miglioramenti di Hari Singh Karam: https://github.com/Club15CC/ActionSheetPicker deprecati fissi nella mia forchetta (penso si è diffuso negli altri ormai): https://github.com/booiiing/ActionSheetPicker

Problemi correlati