2013-07-21 8 views

Antwort

4

Ich habe vor kurzem musste genau dasselbe machen.

  1. Legen Sie eine UITextField in Ihre UITableViewCell (möglicherweise müssen Sie eine benutzerdefinierte erstellen UITableViewCell je nachdem, ob Sie es auf jeder dynamische Zelle Ihres UITableView oder auf einer einzigen statischen Zelle erscheinen soll).
  2. erstellen Eigenschaften für eine UIDatePicker, ein UIToolbar und ein UITextField, dann in IB Haken die UITextField Eigenschaft auf Ihre UITextField in Schritt 1 erstellt haben (Wenn Sie eine benutzerdefinierte UITableViewCell Klasse verwenden, das ist, wo die UITextField Eigenschaft müssten gehe zu):

    @property (strong, nonatomic) UIDatePicker * datePicker; 
    @property (strong, nonatomic) UIToolbar * datePickerToolbar; 
    @property (strong, nonatomic) IBOutlet UITextField *textField; 
    
    ... 
    
    @synthesize datePicker, datePickerToolbar, textField; 
    
  3. Richten Sie Ihre UIDatePicker, UIToolbar und 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 Methode:

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

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

Hinweis: In meinem Code, ich brauchte die Schnittstelle die Zeit anzuzeigen, damit das Datumsformat hier eingestellt (HH:mm). Aus diesem Grund werden Sie auch feststellen, dass ich in meinem UIDatePicker Initialisierungscode in viewDidLoad seinen Modus auf UIDatePickerModeTime festgelegt habe. Für Datumsauswahl können Sie es auf UIDatePickerModeDate festlegen.

+0

das ist toll, aber könnten Sie auf ein paar Dinge näher eingehen. Zuerst erhalte ich diesen Fehler, wenn ich versuche, den Datepicker zurück zu setzen: - [UIBarButtonItem resignFirstResponder]: unerkannter Selektor und könnten Sie mir auch erklären, wie ich den textfields text auf das Datum setzen würde, das der Benutzer gesetzt hat. Wäre es etwas wie textField.text = ?? – Apollo

+0

@Ausgeber Hoppla, überprüfen Sie bitte die Bearbeitung auf meinem 'lossPicker' Code. Außerdem habe ich Code für eine neue Methode hinzugefügt, um auf "UIControlEventValueChanged" zu reagieren, sowie den Code, um ihn auf dem 'UIDatePicker' einzurichten. – Yazid

+0

das ist so toller Mann. Danke, dass Sie sich die Zeit genommen haben, mich durch dieses Thema zu führen. Schätze es wirklich. – Apollo

3

Sie könnten ein unsichtbares UITextField in die UITableViewCell einfügen und die UITextFields-Eingabesicht auf einen UIDatePicker setzen. Hier der Code:

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

Ich benutze ActionSheetPicker [1]. Es erlaubt Ihnen, jede Art von Picker aus einem Aktionsblatt zu zeigen, das die aktuelle Szene teilweise überlappt. Außerdem können Sie Schaltflächen (wie "Abbrechen" oder "Heute") und einen Titel oben in der Ansicht hinzufügen.

[1]: Original-Version von Tim Cinel: https://github.com/TimCinel/ActionSheetPicker Verbesserungen von Hari Karam Singh: https://github.com/Club15CC/ActionSheetPicker Festen Veralten in meiner Gabel (ich glaube es jetzt in die andere verbreitet): https://github.com/booiiing/ActionSheetPicker

Verwandte Themen