Elegantemente sostituire la tastiera iPhone con UIPickerView
-
16-09-2019 - |
Domanda
Ho una visione tabella che ha incorporato UITextFields per l'inserimento di alcuni dati. Essa ha anche altri due campi che PopUp un UIPickerView e UIDatePicker -. Come dimostrato nell'esempio DateCell da Apple
Per lo più funziona, ma non riesco a capire come la transizione in modo pulito dalla tastiera campo di testo agli altri raccoglitori - uno scivola fuori, uno slide in - sembra strano e la posizione di scorrimento sulla visualizzazione della tabella a volte si fa scopare fino -. con tutto scorrere la parte superiore
Quello che mi piacerebbe fare è sostituire la tastiera campo di testo senza di essa l'animazione di distanza e senza di essa cresce la visualizzazione della tabella di nuovo a grandezza naturale.
Eventuali indizi?
Soluzione
Per prima cosa, ecco un screencapture che mostra come questo sembra.
Implementare UITextFieldDelegate e visualizzare un "pop-up" che contiene un UIPickerView.
- (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];
}
Quando la tastiera scompare, la vista selettore è quindi visibile.
Se si vuole prendere questo un po 'più lontano, è possibile animare la "slide in" UIPickerView come la tastiera.
- (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;
}
Altri suggerimenti
Situato a soli immobili inputView del UITextField ad un UIPickerView.