2009-08-14 13 views
14

Ho una vista tabella che ha incorporato i campi UIText per l'immissione di alcuni dati. Ha anche altri due campi che popolano un UIPickerView e un UIDatePicker - come dimostrato nell'esempio DateCell di Apple.Sostituire elegantemente la tastiera dell'iPhone con UIPickerView

Per lo più funziona, ma io 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 sfondare up - con tutto ciò che scorreva in alto.

Quello che mi piacerebbe fare è sostituire la tastiera del campo di testo senza che si animi e senza che la vista del tavolo ritorni a pieno formato.

Eventuali indizi?

risposta

31

Innanzitutto, ecco uno screencapture showing how this looks.

Implementare UITextFieldDelegate e visualizzare un "popup" contenente 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, una vista di selezione è quindi visibile.

Se si vuole fare un po 'di più, è possibile animare la "slide in" di 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; 
} 
+0

Grazie per questa risposta. – camilo

+12

Come nota, questo è il vecchio modo di farlo. Una versione più "moderna" userebbe la proprietà inputView di textField. –

29

Basta impostare la proprietà inputView di UITextField su UIPickerView.

+0

Molto meglio, ma non sembra giusto sull'ipad. – TMB

+0

Vorrei dare un'occhiata a questa risposta e non impostare semplicemente lo stile DatePicker: http://stackoverflow.com/questions/4777237/iphone-datepicker-instead-of-keyboard – LordParsley

Problemi correlati