2009-08-14 14 views
14

Ich habe eine Tabellenansicht, die UITextFields für die Eingabe von Daten eingebettet hat. Es hat auch zwei andere Felder, die einen UIPickerView und einen UIDatePicker aufrufen - wie im DateCell-Beispiel von Apple gezeigt.Elegant iPhone-Tastatur mit UIPickerView ersetzen

Meistens funktioniert es, aber ich kann nicht herausfinden, wie man sauber von der Textfeld-Tastatur zu den anderen Pickern übergeht - man gleitet heraus, man gleitet hinein - es sieht komisch aus und die Scroll-Position auf der Tischansicht wird manchmal verschraubt oben - mit allem, was von oben nach unten gescrollt wurde.

Was ich tun möchte, ist die Textfeld-Tastatur zu ersetzen, ohne dass es weg animiert und ohne es vergrößert die Tabellenansicht wieder auf die volle Größe.

Irgendwelche Hinweise?

Antwort

31

Zuerst ist hier eine screencapture showing how this looks.

Implementieren Sie UITextFieldDelegate und zeigen Sie ein "Popup" mit einem UIPickerView an.

- (void)textFieldDidEndEditing:(UITextField *)textField { 

    UIPickerView *picker = [[UIPickerView alloc] 
           initWithFrame:CGRectMake(0, 244, 320, 270)]; 
    picker.delegate = self; 
    picker.dataSource = self; 
    [self.view addSubview:picker]; 
    [picker release]; 
} 

Wenn die Tastatur verschwindet, ist eine Auswahlansicht sichtbar.

Wenn Sie das ein bisschen weiter bringen möchten, können Sie das UIPickerView "einschieben" wie die Tastatur animieren.

- (void)viewDidLoad { 

    //picker exists in the view, but is outside visible range 
    picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)]; 
    picker.delegate = self; 
    picker.dataSource = self; 
    [self.view addSubview:picker]; 
    [picker release]; 
} 

//animate the picker into view 
- (void)textFieldDidEndEditing:(UITextField *)textField { 

    [UIView beginAnimations:@"picker" context:nil]; 
    [UIView setAnimationDuration:0.5]; 

    picker.transform = CGAffineTransformMakeTranslation(0,-236); 
    [UIView commitAnimations]; 

} 

//animate the picker out of view 
- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    [UIView beginAnimations:@"picker" context:nil]; 
    [UIView setAnimationDuration:0.5]; 

    picker.transform = CGAffineTransformMakeTranslation(0,236); 
    [UIView commitAnimations]; 
} 

//just hide the keyboard in this example 
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return NO; 
} 
+0

Vielen Dank für diese Antwort. – camilo

+12

Nur als eine Anmerkung, dies ist der alte Weg, dies zu tun. Eine "modernere" Version würde die Eigenschaft inputView von textField verwenden. –

29

Setzen Sie die Eigenschaft inViewView des UITextField auf eine UIPickerView.

+0

Viel besser, aber es sieht nicht richtig auf dem iPad. – TMB

+0

Ich würde diese Antwort auschecken und nur nicht auf Datumsformat einstellen: http://stackoverflow.com/questions/4777237/iphone-datepicker-instead-of-keyboard – LordParsley