2012-06-16 4 views
6

Ich habe einen Tabellenansicht-Controller mit (unter anderem) einer Zelle, die ein Datum darstellen soll. Ich folgte diesem Beitrag "How do I make a modal date picker that only covers half the screen?" und ich habe es funktioniert mit einer großen Ausnahme - ich kann nicht den Pflücker verschwinden zu lassen!Ersetzen der UITextField-Eingabe durch einen UIDatePicker

Ich habe versucht, für die Veranstaltung registrieren UIControlEventTouchUpOutside, aber es scheint, dass dies nicht durch den Kommissionierer (oder zumindest im Modus, dass ich es bin mit) erzeugt wird.

Wie kann ich erkennen, dass der Benutzer ein Datum ausgewählt hat?

Gibt es auch eine Möglichkeit, den Benutzer daran zu hindern, direkt in das UITextField einzugeben? Ich möchte sie zwingen, den Pflücker zu benutzen. Ich sah diesen Beitrag "Disable blinking cursor in UITextField?", aber gibt es einen anderen Weg?

Reagards,

--John

Antwort

12

diesen Code Versuchen .. hier ich eine Datepicker zu einer UITextField bin setzen .. es wird eine fertig Button oben rechts Navigationsleiste haben .. so durch einen Klick getan Ich werde Benutzer kann den Datepicker entlassen .. die andere beste Methode ist, indem Sie eine Symbolleiste über dem Datepicker mit der Schaltfläche done .. Versuchen Sie es wird es funktionieren .. wenn Sie den Datepicker ändern können Sie das Textfeld ausfüllen .. Hoffe das hilft ..

siehe diese stackoverflow Verbindung https://stackoverflow.com/a/4824319/763747 Dies wird den Datepicker mit done b haben als

#pragma mark - 
#pragma mark - TextField Delegate 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return TRUE; 
} 


- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    itsRightBarButton.title = @"Done"; 
    itsRightBarButton.style = UIBarButtonItemStyleDone; 
    itsRightBarButton.target = self; 
    itsRightBarButton.action = @selector(doneAction:); 
    if ([textField isEqual:itsIncidentDateTextField]) 
    { 
     itsDatePicker = [[[UIDatePicker alloc] init] autorelease]; 
     itsDatePicker.datePickerMode = UIDatePickerModeDate; 
     [itsDatePicker addTarget:self action:@selector(incidentDateValueChanged:) forControlEvents:UIControlEventValueChanged]; 
     //datePicker.tag = indexPath.row; 
     textField.inputView = itsDatePicker; 
    } 
} 

- (IBAction) incidentDateValueChanged:(id)sender{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMM d, yyyy"]; 
    itsIncidentDateTextField.text = [dateFormatter stringFromDate:[itsDatePicker date]]; 
    [dateFormatter release]; 
} 
+0

Ich sehe, dass die Technik in Kontakt verwendet ist, sagen, wenn Sie einen Geburtstag hinzufügen. Ich muss meine Ansicht überarbeiten, da ich momentan eine Schaltfläche "Abbrechen" als das Element der rechten Leiste habe. Ich werde es versuchen. Danke für die Antwort! – johnnyspo

+0

Sogar ich habe eine Speichern-Taste .. Sie können die Tasten wechseln .. –

+0

Genau das, was ich getan habe !! Danke noch einmal. – johnnyspo

-2

Ich habe eine andere Methode zum Verschwinden der UIDatePicker verwendet.

Erstellen Sie eine XIB (Nib) -Datei und fügen Sie ihr einen UIDatePicker hinzu, dann die Größe der Ansicht so anpassen, dass sie nur den UIDatePicker passt, erstellen Sie eine Eigenschaft (machen Sie es stark und nichtatomisch) in Ihrem ViewController (oder welcher Klasse Sie verwenden und synthetisieren Na sicher).

@property (nonatomic, strong) UIView *myDatePickerView; 
@synthesize myDatePickerView; 

dann eine loadDatePickerView Methode

- (void) loadDatePickerView 
{ 
    UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]]; 
    NSArray *views = [nib instantiateWithOwner:self options:nil]; 
    self.myDatePickerView = [views firstObject]; 
    [myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)]; 
    [self.view addSubview:myDatePickerView]; 
} 

implementieren die UITextFieldDelegate, und in der textFieldDidBeginEditing Methode aufrufen, die loadDatePickerView Methode,

[self loadDatePickerView]; 

machen Funktion eine Eigenschaft erstellen erstellen Das ist eine UI Datepicker-Instanz

@property (nonatomic,strong) 

UIDatePicker *myDatePicker; 

(natürlich synthetisieren)

jetzt eine IBAction wie so erstellen:

-(IBAction)datePickerValueChanged:(UIDatePicker *)sender 
{ 
    myDatePicker = [[myDatePickerView subviews] lastObject]; 
    //now you can do whatever you want with the DatePicker 
} 

nun die IBAction zum Picker in der XIB-Datei verbinden, auf diese Weise die XIB ist jetzt die UIDatePicker-Instanz, die Sie in der VC erstellt haben. Wenn Sie sie verschwinden lassen möchten, können Sie einen UITapGestureRecognizer (in ViewDidLoad) und die s hinzufügen Kurfürst wird ein weiterer IBAction sein, die myDatePickerView von seinem superview wie folgt entfernt:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(dropPicker:)]; 
    [self.view addGestureRecognizer:tap]; 
    [self datePickerValueChanged:myDatePicker]; 
} 

-(IBAction)dropPicker:(id)sender 
{ 
    [myDatePickerView removeFromSuperview]; 
}